"Salut,

Cautand prin cod la lucru am dat peste functia asta foarte interesanta si m-am gandit direct la tine.

Functia returneaza 1 daca in tabela vf_su_pos exista un record cu valoarea coloanei no_pos_rgp egala cu cea a parametrului si 0 altfel.

Comentariile sunt in franceza ... daca trebe le traduc ;)
...


CREATE OR REPLACE FUNCTION pc_bas_is_pos_rgp (p_no_pos VARCHAR2)
RETURN NUMBER
DETERMINISTIC
IS
    v_version          su_ano_his.version%TYPE := '@(#) VERSION 01a $Revision$';
    v_nom_obj          su_ano_his.nom_obj%TYPE := 'pc_bas_is_pos_rgp';
    v_etape            su_ano_his.txt_ano%TYPE := 'Declare';
    v_cod_err_su_ano    su_ano_his.cod_err_su_ano%TYPE := NULL;
    err_except          EXCEPTION;
    v_ret              NUMBER := 0; -- variable de retour.
    v_is_pos_rgp        BOOLEAN := FALSE; -- variable indiquant si c'est un poste de regroupement.

    -- ----------------------
    -- Curseur permettant de recuperer les postes regroupes sous le poste p_no_pos.
    -- ----------------------
    CURSOR c_pos_rgp (x_no_pos su_pos.no_pos%TYPE) IS
        SELECT no_pos
          FROM vf_pc_pos
        WHERE no_pos_rgp = x_no_pos;

    r_pos_rgp          c_pos_rgp%ROWTYPE;

BEGIN
    v_etape := '-- Debut --';
    IF su_global_pkv.v_niv_dbg >= 3 THEN
        su_bas_put_debug(v_nom_obj||' : p_no_pos = ' || p_no_pos);
    END IF;

    v_etape := '-- Rch si il existe un(des) poste(s) regroupe sous le poste p_no_pos --';
    FOR r_pos_rgp IN c_pos_rgp(p_no_pos)
    LOOP
        EXIT WHEN v_is_pos_rgp = TRUE;
        IF v_is_pos_rgp <> TRUE THEN
            v_is_pos_rgp := TRUE;
        END IF;
    END LOOP;

    IF v_is_pos_rgp = TRUE THEN
        v_ret := 1;
    ELSE
        v_ret := 0;
    END IF;

    RETURN v_ret;
END;
"

Este musai.