Bonjour à tous,
Voilà j'aimerais faire une procedure me permettant de sortir les sequences oracle à mettre à jour. Je dois ajouter le DROP et le CREATE SEQUENCE
dans le cas ou le MAXID de ma table soit incohérent avec sa séquence mais je ne sais pas de quelle facon de facon a ce que ce soit le plus optimal possible.
J'aimerais que les requêtes soient en output de facon à les passer à la mano pour eviter les erreurs.
Je vous mets le bout de code pl sql que j'ai commencé à faire
merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 SET SERVEROUTPUT ON DECLARE difference INTEGER; sqlstmt VARCHAR2(255) ; sqlstmt2 VARCHAR2(255) ; sqlstmt3 VARCHAR2(255) ; nextsequencevalue NUMBER; sequencename VARCHAR2(30) ; sequencelastnumber INTEGER; CURSOR allseq IS SELECT sequence_name, last_number FROM user_sequences ORDER BY sequence_name; BEGIN DBMS_OUTPUT.enable(64000) ; OPEN allseq; LOOP FETCH allseq INTO sequencename, sequencelastnumber; EXIT WHEN allseq%NOTFOUND; -- 1.recupère le maxid de la table sqlstmt2 := 'select max(' || regexp_replace(sequencename,'ID_SEQ|_SEQ','ID')||') from ' || regexp_replace(sequencename,'ID_SEQ|_SEQ','') ; DBMS_OUTPUT.PUT_LINE(sqlstmt2); -- 2.on stocke le resultat dans la variable sequencelastnumber execute immediate sqlstmt2 into sequencelastnumber; DBMS_OUTPUT.PUT_LINE('maxid:' ||sequencelastnumber) ; -- 3.calcul de la prochaine valeur de la séquence sqlstmt3 := 'SELECT ' || sequencename ||'.NEXTVAL from dual'; DBMS_OUTPUT.PUT_LINE('EXECUTE IMMEDIATE ' || sqlstmt3 || ' INTO sequenceValue') ; -- 4. stockage de la prochaine execute immediate sqlstmt3 into nextsequencevalue; DBMS_OUTPUT.PUT_LINE('next value is:' ||nextsequencevalue) ; END LOOP; CLOSE allseq; END;
Partager