| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  25-06-2014, 12:43 | #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: 08:50.









 
		 
		 
		 
		





 
  
 



 
                        
                        










