|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2007
Messaggi: 93
|
[ORACLE PL/SQL] Creazione function PL/SQL per verifica valore sequence con val PK
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. Codice:
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? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:58.



















