IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

pb execution de fonction


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 190
    Par défaut pb execution de fonction
    salut ,
    j'ai la fonction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create or replace function aa(a number)  return number is
      Result number;
    begin 
     update test set x = a ;
      result := sql%rowcount;
      return(Result);
    end aa;
    et en executant cette fonction il me donne le message suivant :
    ORA-14551: impossible d'effectuer une opération DML dans une interrogation
    ORA-06512: à "AMEN.AA", ligne 5
    ORA-06512: à ligne 1
    est ce que je peux savoir la cause,
    Merci,

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    si tu appelles la fonction dans un SELECT, la fonction ne peut pas modifier les données.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 190
    Par défaut
    Oui j'appele la fonction dans un select ,
    est ce que je peux pourquoi elle ne peut pas modifier les donner

  4. #4
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut

    http://www.developpez.net/forums/sho...ight=DML+query
    http://www.developpez.net/forums/sho...ight=DML+query
    http://www.developpez.net/forums/sho...ight=DML+query
    ...

    http://ora-14551.ora-code.com/?txt_erreur=14551 :
    ORA-14551: cannot perform a DML operation inside a query
    Cause: DML operation like insert, update, delete or select-for-update cannot be performed inside a query or under a PDML slave.
    Action: Ensure that the offending DML operation is not performed or use an autonomous transaction to perform the DML operation within the query or PDML slave.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Voir aussi le Oracle® Database PL/SQL User's Guide and Reference:
    http://download-uk.oracle.com/docs/c...ams.htm#i22204

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 190
    Par défaut
    Merci pour vous tous;

  7. #7
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Par défaut
    Bonjour Daliok,

    Ce que tu veux faire est possible, mais je ne l'encourage pas. En fait, il faut utiliser une transaction autonome dans ta fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE OR REPLACE FUNCTION aa(a number)  RETURN number IS
      pragma autonomous_transaction ;
      Result number;
    begin 
     UPDATE test SET x = a ;
     result := sql%rowcount;
     commit ;
     RETURN(Result);
    end aa;
    /
    D'ailleurs, je te remercie d'avoir posé la question, car grâce à toi, j'ai compris pourquoi sur un des projets dont j'ai hérité, les développeurs avaient collé de la transaction autonome dans toutes leurs fonctions PL/SQL.

    C'est en fait parce que leurs fonctions sont appelées depuis un Shell sous SQL*Plus, par une commande du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select maFonction (param) from dual ;
    Comme quoi, même avec des années d'expérience, on en apprend tous les jours !!!

  8. #8
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    en effet, c'est une solution mais dans ce cas précis j'encourage à éviter la fonction pour utiliser du SQL simple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/01/2006, 16h02
  2. Réponses: 1
    Dernier message: 17/10/2005, 22h47
  3. [VBA] Executer une fonction en passant son nom en argument
    Par David Guyon dans le forum Access
    Réponses: 4
    Dernier message: 05/10/2005, 19h56
  4. executer une fonction à la fermeture d'une fenêtre
    Par Oluha dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/02/2005, 09h46
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo