From 4f8af6e254f0adf3bbf95d600666cbbd8850b25b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Laurent=20L=C3=A9cluse?= <laurent.lecluse@unicaen.fr>
Date: Tue, 17 Nov 2020 10:59:28 +0100
Subject: [PATCH] Modif Unicaen_Tbl pour ne plus utiliser la table tbl_dems
---
data/ddl/package/UNICAEN_TBL/body.sql | 280 +++++++++++++-------------
1 file changed, 138 insertions(+), 142 deletions(-)
diff --git a/data/ddl/package/UNICAEN_TBL/body.sql b/data/ddl/package/UNICAEN_TBL/body.sql
index 71aca3b137..3f3c18e4fe 100644
--- a/data/ddl/package/UNICAEN_TBL/body.sql
+++ b/data/ddl/package/UNICAEN_TBL/body.sql
@@ -1,169 +1,165 @@
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);
- FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL,
- alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
- res VARCHAR2(120) DEFAULT '';
- BEGIN
- IF param IS NULL THEN
- RETURN '1=1';
- END IF;
+ dems t_dems;
- 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 MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL,
+ alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
+ res VARCHAR2(120) DEFAULT '';
+ BEGIN
+ 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;
- paramComm VARCHAR2(200);
- debComm NUMERIC;
- endComm NUMERIC;
- debReal NUMERIC;
- realParam VARCHAR2(80);
- realValue VARCHAR2(120);
- q CLOB;
- BEGIN
- q := sqlQuery;
- IF param IS NULL THEN
- RETURN q;
- END IF;
+ FUNCTION QUERY_APPLY_PARAM(sqlQuery VARCHAR2, param VARCHAR2, value VARCHAR2) RETURN CLOB IS
+ pos NUMERIC;
+ paramLen NUMERIC;
+ paramComm VARCHAR2(200);
+ debComm NUMERIC;
+ endComm NUMERIC;
+ debReal NUMERIC;
+ realParam VARCHAR2(80);
+ realValue VARCHAR2(120);
+ q CLOB;
+ BEGIN
+ q := sqlQuery;
+ IF param IS NULL THEN
+ RETURN q;
+ END IF;
- paramlen := length(param);
+ paramlen := length(param);
+ IF value IS NULL THEN
+ realValue := ' IS NULL';
+ ELSE
+ BEGIN
+ realValue := TO_NUMBER(value);
+ EXCEPTION
+ WHEN VALUE_ERROR THEN
+ realValue := 'q''[' || value || ']''';
+ END;
+ realValue := '=' || realValue;
+ END IF;
- IF value IS NULL THEN
- realValue := ' IS NULL';
- ELSE
- BEGIN
- realValue := TO_NUMBER(value);
- EXCEPTION
- WHEN VALUE_ERROR THEN
- realValue := 'q''[' || value || ']''';
- END;
+ 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;
- realValue := '=' || realValue;
- END IF;
+ RETURN q;
+ END;
- 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);
+ PROCEDURE CALCULER(TBL_NAME VARCHAR2) IS
+ BEGIN
+ ANNULER_DEMANDES(TBL_NAME);
+ CALCULER(TBL_NAME, null, null);
+ END;
- realParam := trim(substr(paramComm, debReal + 1));
- --realParam := 'AND ' || substr(q,pos + paramLen + 4,endComm-pos - paramLen - 4);
- realParam := 'AND ' || realParam || realValue;
+ PROCEDURE CALCULER(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS
+ calcul_proc varchar2(30);
+ BEGIN
+ IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF;
- 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);
- CALCULER(TBL_NAME, null, null);
- END;
-
-
- PROCEDURE CALCULER(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS
- calcul_proc varchar2(30);
- BEGIN
- IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF;
-
- SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME;
-
- UNICAEN_TBL.CALCUL_PROC_PARAM := PARAM;
- UNICAEN_TBL.CALCUL_PROC_VALUE := VALUE;
- IF calcul_proc IS NOT NULL THEN
- EXECUTE IMMEDIATE
- 'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAM,UNICAEN_TBL.CALCUL_PROC_VALUE); END;';
- ELSE
- EXECUTE IMMEDIATE
- '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);
- END;
-
-
- PROCEDURE ANNULER_DEMANDES IS
- BEGIN
- DELETE FROM tbl_dems;
- END;
-
-
- PROCEDURE ANNULER_DEMANDES(TBL_NAME VARCHAR2) IS
- BEGIN
- DELETE FROM tbl_dems WHERE tbl_name = ANNULER_DEMANDES.tbl_name;
- 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;
- 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;
- 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;
- END LOOP;
- DELETE FROM TBL_DEMS;
- COMMIT;
+ SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME;
- i := dems.FIRST;
- LOOP EXIT WHEN i IS NULL;
- calculer(dems(i).tbl_name, dems(i).param, dems(i).value);
+ UNICAEN_TBL.CALCUL_PROC_PARAM := PARAM;
+ UNICAEN_TBL.CALCUL_PROC_VALUE := VALUE;
+ IF calcul_proc IS NOT NULL THEN
+ EXECUTE IMMEDIATE
+ 'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAM,UNICAEN_TBL.CALCUL_PROC_VALUE); END;';
+ ELSE
+ EXECUTE IMMEDIATE
+ 'BEGIN UNICAEN_TBL.C_' || TBL_NAME ||
+ '(UNICAEN_TBL.CALCUL_PROC_PARAM,UNICAEN_TBL.CALCUL_PROC_VALUE); END;';
+ END IF;
+ END;
- i := dems.NEXT(i);
+
+
+ PROCEDURE DEMANDE_CALCUL(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS
+ BEGIN
+ dems(TBL_NAME)(param)(value) := TRUE;
+ END;
+
+
+
+ PROCEDURE ANNULER_DEMANDES IS
+ BEGIN
+ dems.delete;
+ END;
+
+
+
+ PROCEDURE ANNULER_DEMANDES(TBL_NAME VARCHAR2) IS
+ BEGIN
+ dems(tbl_name).delete;
+ END;
+
+
+
+ FUNCTION HAS_DEMANDES RETURN BOOLEAN IS
+ BEGIN
+ RETURN dems.count > 0;
+ END;
+
+
+
+ PROCEDURE CALCULER_DEMANDES IS
+ d t_dems;
+ tbl_name VARCHAR2(30);
+ param VARCHAR2(30);
+ value VARCHAR2(80);
+ BEGIN
+ 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;
+ param := d(tbl_name).NEXT(param);
+ END LOOP;
+ tbl_name := d.NEXT(tbl_name);
+ END LOOP;
+
+ IF HAS_DEMANDES THEN -- pour les boucles !!
+ CALCULER_DEMANDES;
+ END IF;
+ END;
- IF HAS_DEMANDES THEN -- pour les boucles !!
- CALCULER_DEMANDES;
- END IF;
- END;
- -- AUTOMATIC GENERATION --
+ -- AUTOMATIC GENERATION --
PROCEDURE C_AGREMENT(param VARCHAR2, value VARCHAR2) IS
TYPE r_cursor IS REF CURSOR;
--
GitLab