Loading data/ddl/package/UNICAEN_TBL/body.sql +138 −142 Original line number Diff line number Diff line CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS TYPE t_dems_values IS TABLE OF BOOLEAN INDEX BY VARCHAR2(80); TYPE t_dems_params IS TABLE OF t_dems_values INDEX BY VARCHAR2(30); TYPE t_dems IS TABLE OF t_dems_params INDEX BY VARCHAR2(30); dems t_dems; FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL, alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS Loading @@ -7,19 +14,17 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS IF param IS NULL THEN RETURN '1=1'; END IF; IF alias IS NOT NULL THEN res := alias || '.'; END IF; IF value IS NULL THEN RETURN res || param || ' IS NULL'; END IF; RETURN res || param || ' = q''[' || value || ']'''; END; FUNCTION QUERY_APPLY_PARAM(sqlQuery VARCHAR2, param VARCHAR2, value VARCHAR2) RETURN CLOB IS pos NUMERIC; paramLen NUMERIC; Loading @@ -32,13 +37,11 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS q CLOB; BEGIN q := sqlQuery; IF param IS NULL THEN RETURN q; END IF; paramlen := length(param); IF value IS NULL THEN realValue := ' IS NULL'; ELSE Loading @@ -48,32 +51,27 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS WHEN VALUE_ERROR THEN realValue := 'q''[' || value || ']'''; END; realValue := '=' || realValue; END IF; LOOP pos := instr(q, '/*@' || param, 1, 1); EXIT WHEN pos = 0; debComm := pos - 1; endComm := instr(q, '*/', pos, 1); paramComm := substr(q, debComm, endComm - debComm); debReal := instr(paramComm, '=', 1, 1); realParam := trim(substr(paramComm, debReal + 1)); --realParam := 'AND ' || substr(q,pos + paramLen + 4,endComm-pos - paramLen - 4); realParam := 'AND ' || realParam || realValue; q := substr(q, 1, debComm) || realParam || substr(q, endComm + 2); END LOOP; RETURN q; END; PROCEDURE CALCULER(TBL_NAME VARCHAR2) IS BEGIN ANNULER_DEMANDES(TBL_NAME); Loading @@ -81,6 +79,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS END; PROCEDURE CALCULER(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS calcul_proc varchar2(30); BEGIN Loading @@ -98,63 +97,59 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS 'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(UNICAEN_TBL.CALCUL_PROC_PARAM,UNICAEN_TBL.CALCUL_PROC_VALUE); END;'; END IF; END; PROCEDURE DEMANDE_CALCUL(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS BEGIN INSERT INTO tbl_dems (ID, TBL_NAME, PARAM, VALUE) VALUES (TBL_DEMS_ID_SEQ.NEXTVAL, TBL_NAME, PARAM, VALUE); dems(TBL_NAME)(param)(value) := TRUE; END; PROCEDURE ANNULER_DEMANDES IS BEGIN DELETE FROM tbl_dems; dems.delete; END; PROCEDURE ANNULER_DEMANDES(TBL_NAME VARCHAR2) IS BEGIN DELETE FROM tbl_dems WHERE tbl_name = ANNULER_DEMANDES.tbl_name; dems(tbl_name).delete; END; FUNCTION HAS_DEMANDES RETURN BOOLEAN IS has_dems NUMERIC; BEGIN SELECT count(*) INTO has_dems from tbl_dems where rownum = 1; RETURN has_dems = 1; RETURN dems.count > 0; END; PROCEDURE CALCULER_DEMANDES IS TYPE t_dems IS TABLE OF tbl_dems%rowtype INDEX BY PLS_INTEGER; dems t_dems; i NUMERIC DEFAULT 0; d t_dems; tbl_name VARCHAR2(30); param VARCHAR2(30); value VARCHAR2(80); BEGIN FOR d IN ( SELECT DISTINCT tbl_name, param, value FROM tbl_dems ) LOOP i := i + 1; dems(i).tbl_name := d.tbl_name; dems(i).param := d.param; dems(i).value := d.value; d := dems; dems.delete; tbl_name := d.FIRST; LOOP EXIT WHEN tbl_name IS NULL; param := d(tbl_name).FIRST; LOOP EXIT WHEN param IS NULL; value := d(tbl_name)(param).FIRST; LOOP EXIT WHEN value IS NULL; calculer(tbl_name, param, value); value := d(tbl_name)(param).NEXT(value); END LOOP; DELETE FROM TBL_DEMS; COMMIT; i := dems.FIRST; LOOP EXIT WHEN i IS NULL; calculer(dems(i).tbl_name, dems(i).param, dems(i).value); i := dems.NEXT(i); param := d(tbl_name).NEXT(param); END LOOP; tbl_name := d.NEXT(tbl_name); END LOOP; IF HAS_DEMANDES THEN -- pour les boucles !! Loading @@ -163,6 +158,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS END; -- AUTOMATIC GENERATION -- PROCEDURE C_AGREMENT(param VARCHAR2, value VARCHAR2) IS Loading Loading
data/ddl/package/UNICAEN_TBL/body.sql +138 −142 Original line number Diff line number Diff line CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS TYPE t_dems_values IS TABLE OF BOOLEAN INDEX BY VARCHAR2(80); TYPE t_dems_params IS TABLE OF t_dems_values INDEX BY VARCHAR2(30); TYPE t_dems IS TABLE OF t_dems_params INDEX BY VARCHAR2(30); dems t_dems; FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL, alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS Loading @@ -7,19 +14,17 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS IF param IS NULL THEN RETURN '1=1'; END IF; IF alias IS NOT NULL THEN res := alias || '.'; END IF; IF value IS NULL THEN RETURN res || param || ' IS NULL'; END IF; RETURN res || param || ' = q''[' || value || ']'''; END; FUNCTION QUERY_APPLY_PARAM(sqlQuery VARCHAR2, param VARCHAR2, value VARCHAR2) RETURN CLOB IS pos NUMERIC; paramLen NUMERIC; Loading @@ -32,13 +37,11 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS q CLOB; BEGIN q := sqlQuery; IF param IS NULL THEN RETURN q; END IF; paramlen := length(param); IF value IS NULL THEN realValue := ' IS NULL'; ELSE Loading @@ -48,32 +51,27 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS WHEN VALUE_ERROR THEN realValue := 'q''[' || value || ']'''; END; realValue := '=' || realValue; END IF; LOOP pos := instr(q, '/*@' || param, 1, 1); EXIT WHEN pos = 0; debComm := pos - 1; endComm := instr(q, '*/', pos, 1); paramComm := substr(q, debComm, endComm - debComm); debReal := instr(paramComm, '=', 1, 1); realParam := trim(substr(paramComm, debReal + 1)); --realParam := 'AND ' || substr(q,pos + paramLen + 4,endComm-pos - paramLen - 4); realParam := 'AND ' || realParam || realValue; q := substr(q, 1, debComm) || realParam || substr(q, endComm + 2); END LOOP; RETURN q; END; PROCEDURE CALCULER(TBL_NAME VARCHAR2) IS BEGIN ANNULER_DEMANDES(TBL_NAME); Loading @@ -81,6 +79,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS END; PROCEDURE CALCULER(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS calcul_proc varchar2(30); BEGIN Loading @@ -98,63 +97,59 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS 'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(UNICAEN_TBL.CALCUL_PROC_PARAM,UNICAEN_TBL.CALCUL_PROC_VALUE); END;'; END IF; END; PROCEDURE DEMANDE_CALCUL(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS BEGIN INSERT INTO tbl_dems (ID, TBL_NAME, PARAM, VALUE) VALUES (TBL_DEMS_ID_SEQ.NEXTVAL, TBL_NAME, PARAM, VALUE); dems(TBL_NAME)(param)(value) := TRUE; END; PROCEDURE ANNULER_DEMANDES IS BEGIN DELETE FROM tbl_dems; dems.delete; END; PROCEDURE ANNULER_DEMANDES(TBL_NAME VARCHAR2) IS BEGIN DELETE FROM tbl_dems WHERE tbl_name = ANNULER_DEMANDES.tbl_name; dems(tbl_name).delete; END; FUNCTION HAS_DEMANDES RETURN BOOLEAN IS has_dems NUMERIC; BEGIN SELECT count(*) INTO has_dems from tbl_dems where rownum = 1; RETURN has_dems = 1; RETURN dems.count > 0; END; PROCEDURE CALCULER_DEMANDES IS TYPE t_dems IS TABLE OF tbl_dems%rowtype INDEX BY PLS_INTEGER; dems t_dems; i NUMERIC DEFAULT 0; d t_dems; tbl_name VARCHAR2(30); param VARCHAR2(30); value VARCHAR2(80); BEGIN FOR d IN ( SELECT DISTINCT tbl_name, param, value FROM tbl_dems ) LOOP i := i + 1; dems(i).tbl_name := d.tbl_name; dems(i).param := d.param; dems(i).value := d.value; d := dems; dems.delete; tbl_name := d.FIRST; LOOP EXIT WHEN tbl_name IS NULL; param := d(tbl_name).FIRST; LOOP EXIT WHEN param IS NULL; value := d(tbl_name)(param).FIRST; LOOP EXIT WHEN value IS NULL; calculer(tbl_name, param, value); value := d(tbl_name)(param).NEXT(value); END LOOP; DELETE FROM TBL_DEMS; COMMIT; i := dems.FIRST; LOOP EXIT WHEN i IS NULL; calculer(dems(i).tbl_name, dems(i).param, dems(i).value); i := dems.NEXT(i); param := d(tbl_name).NEXT(param); END LOOP; tbl_name := d.NEXT(tbl_name); END LOOP; IF HAS_DEMANDES THEN -- pour les boucles !! Loading @@ -163,6 +158,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS END; -- AUTOMATIC GENERATION -- PROCEDURE C_AGREMENT(param VARCHAR2, value VARCHAR2) IS Loading