PDA

View Full Version : [ORACLE PL/SQL] Creazione function PL/SQL per verifica valore sequence con val PK


pumapc
25-06-2014, 12:43
Ciao a tutti,

ho creato questo PL/SQL per verificare se il valore della sequence č minore al valore del MAX del campo della Primary Key.

SET SERVEROUTPUT ON;
DECLARE
val_max number;

CURSOR CSCHEMA IS
SELECT sequence_name, NVL(last_number,0) as last_number, (last_number + increment_by) NEXT_VALUE, us_constr.CONSTRAINT_NAME, us_constr.table_NAME, cols.column_name
FROM user_sequences us_seq, USER_CONSTRAINTS us_constr, USER_CONS_COLUMNS cols, USER_TAB_COLUMNS tab_colum
where REPLACE(sequence_name, 'SEQ_', 'T_') = us_constr.table_NAME
and us_constr.CONSTRAINT_NAME like 'PK%'
and us_constr.constraint_name = cols.constraint_name
and tab_colum.table_name = cols.table_name
and tab_colum.column_name = cols.column_name
and tab_colum.data_type = 'NUMBER'
and cols.position = 1
order by 1;

RSCHEMA CSCHEMA%ROWTYPE;
BEGIN
SYS.DBMS_OUTPUT.PUT_LINE('START - DETAILS VALUE SEQUENCE');
OPEN CSCHEMA;
LOOP
FETCH CSCHEMA INTO RSCHEMA;
EXIT WHEN CSCHEMA%NOTFOUND;
EXECUTE IMMEDIATE 'select NVL((select max('|| RSCHEMA.column_name || ') FROM ' || RSCHEMA.table_NAME ||'),0) from dual' into val_max;

IF (RSCHEMA.last_number < val_max) THEN
SYS.DBMS_OUTPUT.PUT_LINE('TABLE ' || RSCHEMA.TABLE_NAME || ' ### LAST_NUMBER = ' || RSCHEMA.last_number || ' ### COLUMN_NAME ' || RSCHEMA.column_name || ' ### VAL_MAX PK = ' || val_max);
END IF;


END LOOP;
CLOSE CSCHEMA;
SYS.DBMS_OUTPUT.PUT_LINE('END - DETAILS VALUE SEQUENCE');
END;
/


Detto questo, vorrei trasformare questo PL/SQL in una funzione PL/SQL che mi tiri fuori uno o pių record in formato tabellare con le informazioni presenti nell'output precedente.

Come DB viene usato Oracle 11g.

Come posso fare?