
December 1, 2009 01:38 by
nelutu
Salut,
Sa nu credeti ca numai oamenii fac greseli cand programeaza... uite ca si codul autogenerat de sql stie sa dea cu bata-n balta (nu ca n-ar fi fost programat tot de un om).

f0067c9f-74ec-41e9-bab5-45c4ac71d2f5|1|5.0
"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.
fc91bbdd-5660-4439-978d-183b28d3684e|1|4.0