Bonjour!
Ce que j'ai: une table dont la pk est autoincrémentée grâce à une séquence
Ce que je veux: lorsque la clé max de ma table est à 99, par exemple, et que ma séquence n'à pas été incrémentée (qu'elle est toujours à 10, encore par exemple), c'est mettre ma séquence à cette valeur.
Alors, pour ce faire, j'ai créer une petit procédure qui fonctionne sous cette forme:
Mais, lorsque j'enlève les paramètres de mes deux dernière lignes (qui servent à renommer ma séquence temporaire sous le nom de la séquence finale), j'obtiens l'erreur
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 CREATE OR REPLACE PROCEDURE pr_sequence (nom_sq IN VARCHAR2, nom_tb IN VARCHAR2, nom_pk IN VARCHAR2) AS pk_max NUMBER(6); sq_courante NUMBER(6); ldd VARCHAR2(500); utilisateur VARCHAR2(30):=USER; BEGIN ldd:='DROP SEQUENCE '||nom_sq; EXECUTE IMMEDIATE ldd; EXECUTE IMMEDIATE 'DROP SEQUENCE sq_temporaire'; EXECUTE IMMEDIATE 'CREATE SEQUENCE sq_temporaire'; ldd:='SELECT MAX('||nom_pk||') FROM '||nom_tb; EXECUTE IMMEDIATE ldd INTO pk_max; LOOP SELECT sq_temporaire.NEXTVAL INTO sq_courante FROM DUAL; EXIT WHEN sq_courante=pk_max; END LOOP; /*ldd:='RENAME sq_temporaire TO '||nom_sq; EXECUTE IMMEDIATE ldd;*/ END; /
Code : Sélectionner tout - Visualiser dans une fenêtre à part ORA-03113: fin de fichier sur canal de communicationAlors là, je me tate... Ce que je me suis dit, c'est de tester:
Lorsque je lance ma procédure sous cette forme là (renommage en paramètre, donc pas exécuté), la procédure fonctionne, ma séquence est correctement incrémentée, mais lorsque je veux la renommer, manuellement, même erreure! Et je n'ai cette erreur uniquement si je lance ma procédure. Lorsque je me logue sur le serveur en sysdba, je peux renommer ma séquence, pas de problèmes, mais lorsque je lance ma procédure, impossible de la renommer...
Quelqu'un aurrait une idée, parce que je sèche, là...
Merci d'avance!
Partager