Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2461 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle 10.2] Erreur dans fonction stocké PL/SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle 10.2] Erreur dans fonction stocké PL/SQL

n°1507048
pegase06
Posté le 25-01-2007 à 10:34:50  profilanswer
 

Bonjour,
J'ai une erreur dasn un fonction stockée :
 

Code :
  1. CREATE OR REPLACE
  2. FUNCTION DEBUG (
  3.     debut IN DATE,
  4.     fin IN DATE,
  5. ) RETURN PLS_INTEGER
  6.    
  7. BEGIN
  8.    
  9.         FOR c IN (
  10.             SELECT owner, table_name, constraint_name
  11.             FROM all_constraints
  12.             WHERE constraint_type = 'R'
  13.             AND lower(table_name) IN ('a', 'b', 'c')
  14.         ) LOOP
  15.             EXECUTE IMMEDIATE 'ALTER TABLE ' || contrainte.owner || '.' || contrainte.table_name || ' DISABLE CONSTRAINT ' || contrainte.constraint_name ;
  16.            
  17.         END LOOP;
  18. END DEBUG


 
J'ai l'erreur ;

Code :
  1. 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
mood
Publicité
Posté le 25-01-2007 à 10:34:50  profilanswer
 

n°1507053
MagicBuzz
Posté le 25-01-2007 à 10:37:05  profilanswer
 

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
n°1507054
pegase06
Posté le 25-01-2007 à 10:37:49  profilanswer
 

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
n°1507458
moonboot
Posté le 26-01-2007 à 14:04:03  profilanswer
 

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.

n°1507524
darkfrost
Posté le 26-01-2007 à 15:32:36  profilanswer
 

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 :) !

Message cité 1 fois
Message édité par darkfrost le 26-01-2007 à 15:43:20
n°1507616
hugo25
Posté le 26-01-2007 à 20:18:32  profilanswer
 

darkfrost a écrit :

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;


Message édité par hugo25 le 26-01-2007 à 20:20:05

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle 10.2] Erreur dans fonction stocké PL/SQL

 

Sujets relatifs
Récupérer le résultat d'une fonction javascript dans variable phpUtilisation de SQL Mail
[SQL] une question de pur debutant[PL/SQL] Configuration
Insertion de fonction deplacement... ( je sais pas comment faire.. )[Résolu en 1h30 !][SQL] requête , sous-requêtes
[SQL Server][RESOLU] Mise à jour de base de donnéeProblème de conversion de temps en fonction de timezone
Fonction Mail (erreur...) 
Plus de sujets relatifs à : [Oracle 10.2] Erreur dans fonction stocké PL/SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR