Erreur -14552 : ORA-14552: opération DDL, COMMIT ou ROLLBACK interdite dans une instruction DML ou une interrogation
Je ne comprends pas pourquoi. Merci pour votre aide.
Message édité par pegase06 le 25-01-2007 à 10:58:09
Publicité
Posté le 25-01-2007 à 10:34:50
MagicBuzz
Posté le 25-01-2007 à 10:37:05
Déjà, il manque un END à ton fonction (y'a un BEGIN, mais pas de END correspondant).
Ceci dit, vu l'erreur, ça doit pas venir de là.
Message édité par MagicBuzz le 25-01-2007 à 10:37:33
pegase06
Posté le 25-01-2007 à 10:37:49
J'ai mis que le début de la fonction ou apparait l'erreur.
Si je met en commentaire la ligne EXECUTE IMMEDIATE, je n'ai pas de problème.
Message édité par pegase06 le 25-01-2007 à 10:39:35
moonboot
Posté le 26-01-2007 à 14:04:03
je ne pense pas que tu puisses supprimer des contraintes en étant en select sur la table. ceci dit je n'en suis pas sûr.
essaie plutôt de stocker ca dans un tableau, de dérouler le tableau et de supprimer les contraintes.
darkfrost
Posté le 26-01-2007 à 15:32:36
Sans conviction :tu pars sur un "FOR c IN" et tu y fais référence par contrainte.owner au lieu de c.owner.
Ensuite tu l'utilises à partir d'ou cette fonction ? Pourquoi ne pas faire une procédure qui semble plus approprié à mon goût ?
Et donc à tout hasard, n'essayerais tu pas de lancer cette fonction depuis un ordre SQL ? Si oui, peut tu tester si elle marche depuis un bloc PL/SQL anonyme ? Micii ! Si non, ben je continue à chercher !
Sans conviction :tu pars sur un "FOR c IN" et tu y fais référence par contrainte.owner au lieu de c.owner.
Ensuite tu l'utilises à partir d'ou cette fonction ? Pourquoi ne pas faire une procédure qui semble plus approprié à mon goût ?
Et donc à tout hasard, n'essayerais tu pas de lancer cette fonction depuis un ordre SQL ? Si oui, peut tu tester si elle marche depuis un bloc PL/SQL anonyme ? Micii ! Si non, ben je continue à chercher !
Merci pour ton aide. J'ai finalement trouvé la cause du bug : on ne peut pas lancer en SQL une procédure PL/SQL qui effectue des opérations DDL CREATE, ALTER... ou COMMIT (le EXECUTE IMMEDIATE fait un COMMIT implicite). Il faut impérativement passé par une commande PL/SQL genre BEGIN retour := debug(...); END;