All Downloads are FREE. Search and download functionalities are using the official Maven repository.

expsigladb.Package.CNRUTL001_BODY.sql Maven / Gradle / Ivy

There is a newer version: 6.6.11
Show newest version
--------------------------------------------------------
--  DDL for Package Body CNRUTL001
--------------------------------------------------------

  CREATE OR REPLACE PACKAGE BODY "CNRUTL001" Is
  --
  FUNCTION getCdsFromCdr(cd_centro_resp In VARCHAR2)
  RETURN VARCHAR2 Is
    cd_cds unita_organizzativa.cd_unita_organizzativa%Type;
  Begin
    Select unita_organizzativa.cd_unita_padre
    Into cd_cds
    From unita_organizzativa, cdr
    Where cdr.cd_centro_responsabilita = cd_centro_resp
      And cdr.cd_unita_organizzativa = unita_organizzativa.cd_unita_organizzativa;
    Return cd_cds;
  End getCdsFromCdr;
  --
  FUNCTION getPgProgettoPadre( Progressivo_Progetto  In NUMBER Default Null,
                               Codice_Progetto       In VARCHAR2 Default Null,
                               esercizio_progetto    In NUMBER,
                               tipo_fase_progetto    In VARCHAR2)
  RETURN NUMBER Is
    Cursor Progressivo (Pg In NUMBER,es In NUMBER,fase In VARCHAR2) Is
      Select PG_PROGETTO, PG_PROGETTO_PADRE
      From PROGETTO
      Where PG_PROGETTO = Pg And
            esercizio   = es And
            tipo_fase   = fase;
    Pg_Padre   NUMBER(8);
  Begin
    If Progressivo_Progetto Is Not Null Then
      Pg_Padre := Progressivo_Progetto;
    Elsif Codice_Progetto Is Not Null Then
      Begin
        Select Pg_Progetto
        Into Pg_Padre
        From Progetto
        Where Cd_Progetto = Codice_Progetto And
              esercizio   = esercizio_progetto And
              tipo_fase   = tipo_fase_progetto;
      Exception
        When No_Data_Found Then
          Return Null;
      End;
    Else
      Return Null;
    End If;
    If Pg_Padre Is Null Then
      Return Null;
    Else
      While Pg_Padre Is Not Null Loop
        For Rec In Progressivo(Pg_Padre,esercizio_progetto,tipo_fase_progetto) Loop
          If Rec.PG_PROGETTO_PADRE Is Null Then
            Return Rec.PG_PROGETTO;
          End If;
          Pg_Padre := Rec.PG_PROGETTO_PADRE;
        End Loop;
      End Loop;
      Return Pg_Padre;
    End If;
  End getPgProgettoPadre;
  --
  FUNCTION getValore( TABELLA  In VARCHAR2,
                      COLONNA  In VARCHAR2,
                      PK1      In VARCHAR2 Default Null,
                      PK2      In VARCHAR2 Default Null,
                      PK3      In VARCHAR2 Default Null,
                      PK4      In VARCHAR2 Default Null,
                      PK5      In VARCHAR2 Default Null,
                      PK6      In VARCHAR2 Default Null)
  RETURN VARCHAR2  Is
    CURSOR CHIAVI IS
      Select COLUMN_NAME
        From USER_CONS_COLUMNS,USER_CONSTRAINTS
       Where USER_CONS_COLUMNS.CONSTRAINT_NAME = USER_CONSTRAINTS.CONSTRAINT_NAME
         And USER_CONSTRAINTS.CONSTRAINT_TYPE  = 'P'
         And USER_CONSTRAINTS.TABLE_NAME       = Upper(TABELLA)
       ORDER BY POSITION;
    I           NUMBER;
    Indice      NUMBER:=0;
    Indice_c    NUMBER:=0;
    TESTO       VARCHAR2(4000);
    COLONNA_DES VARCHAR2(4000);
    DESCRIZIONE VARCHAR2(4000);
    cursor_id   INTEGER;
    ret_code    INTEGER;
    Type COL_PK is table of VARCHAR2(4000)
    Index by binary_integer;
    COLONNE_PK COL_PK;
  Begin
    COLONNE_PK.Delete;
    I := 0;
    For Indice In 1..Tb.Count Loop
      If tb(Indice).tabella  = Upper(Tabella)Then
        I := I + 1;
        If tb(Indice).posizione = 1 Then
          COLONNE_PK(tb(Indice).posizione) := tb(Indice).colonna||' = '||''''||PK1||'''';
        Elsif tb(Indice).posizione = 2 Then
          COLONNE_PK(tb(Indice).posizione) := tb(Indice).colonna||' = '||''''||PK2||'''';
        Elsif tb(Indice).posizione = 3 Then
          COLONNE_PK(tb(Indice).posizione) := tb(Indice).colonna||' = '||''''||PK3||'''';
        Elsif tb(Indice).posizione = 4 Then
          COLONNE_PK(tb(Indice).posizione) := tb(Indice).colonna||' = '||''''||PK4||'''';
        Elsif tb(Indice).posizione = 5 Then
          COLONNE_PK(tb(Indice).posizione) := tb(Indice).colonna||' = '||''''||PK5||'''';
        Elsif tb(Indice).posizione = 6 Then
          COLONNE_PK(tb(Indice).posizione) := tb(Indice).colonna||' = '||''''||PK6||'''';
        End If;
      End If;
    End Loop;
    If COLONNE_PK.count = 0 Then
      Indice_c := Tb.Count;
      For REC IN CHIAVI LOOP
          DBMS_OUTPUT.PUT_LINE('SELECT ');
        I:=I+1;
        Indice_c := Indice_c + 1;
        If I=1 THEN
          COLONNE_PK(I) := REC.COLUMN_NAME||' = '||''''||PK1||'''';
        Elsif I=2 THEN
          COLONNE_PK(I) := REC.COLUMN_NAME||' = '||''''||PK2||'''';
        Elsif I=3 THEN
          COLONNE_PK(I) := REC.COLUMN_NAME||' = '||''''||PK3||'''';
        Elsif I=4 THEN
          COLONNE_PK(I) := REC.COLUMN_NAME||' = '||''''||PK4||'''';
        Elsif I=5 THEN
          COLONNE_PK(I) := REC.COLUMN_NAME||' = '||''''||PK5||'''';
        Elsif I=6 THEN
          COLONNE_PK(I) := REC.COLUMN_NAME||' = '||''''||PK6||'''';
        End IF;
        tb(Indice_c).tabella   := Upper(Tabella);
        tb(Indice_c).colonna   := REC.COLUMN_NAME;
        tb(Indice_c).posizione := I;
      End LOOP;
    End If;
    TESTO := 'SELECT '||Upper(COLONNA)||' FROM '||TABELLA||' WHERE ';
    For J In 1..I Loop
      TESTO := TESTO||' '||COLONNE_PK(J);
      Begin
        IF COLONNE_PK(J+1) IS NULL THEN
          EXIT;
        ELSE
          TESTO := TESTO||' AND ';
        END IF;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          EXIT;
      END;
    End Loop;
    Declare
      valore_ritorno INTEGER;
      errore         varchar2(4000);
    Begin
      cursor_id := dbms_sql.open_cursor;
      dbms_sql.parse(cursor_id, TESTO, Dbms_Sql.V7);
      dbms_sql.define_column(cursor_id,1,descrizione,2000);
      ret_code := dbms_sql.execute(cursor_id);
      Loop
        exit when dbms_sql.fetch_rows(cursor_id) = 0;
        dbms_sql.column_value(cursor_id,1,descrizione);
      End loop;
      dbms_sql.close_cursor(cursor_id);
      valore_ritorno := dbms_sql.last_sql_function_code;
      errore := dbms_sql.last_ERROR_POSITION;
    Exception
      When OTHERS THEN
        If DBMS_SQL.IS_OPEN(cursor_id) THEN
          dbms_sql.close_cursor(cursor_id);
        End IF;
        RETURN('Errore: '||Sqlerrm);
    END;
    Return Ltrim(Rtrim(DESCRIZIONE));
  End getValore;
  --
  FUNCTION getRecParametriCnr( inEsercizio  In NUMBER)
  Return PARAMETRI_CNR%Rowtype Is
    rec_parametri_cnr PARAMETRI_CNR%Rowtype;
  Begin
    Select *
    Into rec_parametri_cnr
    From Parametri_CNR
    Where Esercizio = inEsercizio;
    Return rec_parametri_cnr;
  Exception
    When No_Data_Found then
      IBMERR001.RAISE_ERR_GENERICO('Parametri_CNR non trovati per l''anno:'||To_Char(inEsercizio));
  End getRecParametriCnr;
  --
  Function getRecParametriEnteAttivo
  Return PARAMETRI_ENTE%Rowtype Is
    rec_parametri_ente_attivo PARAMETRI_ENTE%Rowtype;
  Begin
    Begin
      Select *
      Into rec_parametri_ente_attivo
      From Parametri_ENTE
      Where attivo = 'Y';
      Return rec_parametri_ente_attivo;
    Exception
        When Too_Many_Rows Then
           Return Null;
        When No_Data_Found then
           IBMERR001.RAISE_ERR_GENERICO('Parametri_ENTE non trovati');
    End;
  End getRecParametriEnteAttivo;
  --
  FUNCTION getRecParametriCds( inEsercizio  In NUMBER,
                               inCds        In VARCHAR2)
  Return PARAMETRI_CDS%Rowtype Is
      rec_parametri_cds PARAMETRI_CDS%Rowtype;
  Begin
    Select *
    Into rec_parametri_cds
    From Parametri_CDS
    Where cd_cds = inCds
      And Esercizio = inEsercizio;
    Return rec_parametri_cds;
  Exception
    When No_Data_Found then
       IBMERR001.RAISE_ERR_GENERICO('Parametri_CDS non trovati per l''anno: '||To_Char(inEsercizio)||' e Cds: '||inCds);
  End getRecParametriCds;
End CNRUTL001;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy