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

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;
merci pour votre aide