-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathAllineaSequence2.sql
More file actions
49 lines (45 loc) · 1.53 KB
/
AllineaSequence2.sql
File metadata and controls
49 lines (45 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
spool AllineaSequence.log
/************************************************************
Copyright Apex-net srl - Via Riccardo Brusi, 151/2 - 47023 Cesena
------------------------------------------------------------
Autore: Fabio Vassura
Data: 27/12/04
Descrizione : Allineamento Sequence
************************************************************/
set serveroutput on size 1000000
declare
v_NOMETABLE VARCHAR2(80);
v_NOMEPK VARCHAR2(80);
v_MAXVAL NUMBER(9);
begin
DECLARE
CURSOR CUR_SEQ IS
SELECT SEQUENCE_NAME
FROM USER_SEQUENCES;
BEGIN
FOR SEQ IN CUR_SEQ LOOP
BEGIN
v_NOMETABLE := SUBSTR(SEQ.SEQUENCE_NAME, 5);
SELECT COLUMN_NAME
INTO v_NOMEPK
FROM USER_CONSTRAINTS T,
USER_CONS_COLUMNS C
WHERE T.TABLE_NAME = v_NOMETABLE
AND T.CONSTRAINT_TYPE = 'P'
AND T.OWNER = C.OWNER
AND T.CONSTRAINT_NAME = C.CONSTRAINT_NAME;
EXECUTE IMMEDIATE ' SELECT MAX(' || v_NOMEPK || ') FROM '|| v_NOMETABLE INTO v_MAXVAL;
IF(v_MAXVAL > 0 AND v_MAXVAL IS NOT NULL) THEN
EXECUTE IMMEDIATE 'DROP SEQUENCE ' || SEQ.SEQUENCE_NAME;
EXECUTE IMMEDIATE 'CREATE SEQUENCE ' || SEQ.SEQUENCE_NAME || ' START WITH '|| TO_CHAR(v_MAXVAL + 1) ||' MAXVALUE 999999999999999999999999999 MINVALUE 1 NOCYCLE NOCACHE NOORDER';
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('SEQ_' || v_NOMETABLE || ' non aggiornata');
END;
END LOOP;
END;
END;
/
spool off;
exit;