Commit 4f8af6e2 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Modif Unicaen_Tbl pour ne plus utiliser la table tbl_dems

parent b25f0e52
Loading
Loading
Loading
Loading
+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
@@ -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;
@@ -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
@@ -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);
@@ -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
@@ -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 !!
@@ -163,6 +158,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
  END;



  -- AUTOMATIC GENERATION --

  PROCEDURE C_AGREMENT(param VARCHAR2, value VARCHAR2) IS