[PL/SQL] procédure: fin de fichier sur canal de com...
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:
Code:
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;
/ |
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:
ORA-03113: fin de fichier sur canal de communication
:koi: Alors 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 8O! 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!