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

Oracle Discussion :

appeler une fonction ou une sous-requête en utilisant :new.col1 dans le Where


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2006
    Messages : 15
    Points : 13
    Points
    13
    Par défaut appeler une fonction ou une sous-requête en utilisant :new.col1 dans le Where
    Bonjour,

    un trigger détecte les modifications sur une table A.
    La table B stocke les mouvements détectés par le trigger.

    Je n'ai pas de problème pour créer la ligne de mouvement dans B si toutes les infos que je veux insérer dans la table B sont dans A.

    Dans ma table A, j'ai une colonne qui fait référence à une autre table qui liste un ensemble de véhicule via une colonne oid et vehicule_id.
    Dans mon trigger, comment puis réaliser l'ordre suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO tableB (colB1, colB2, colB3) 
    VALUES (:new.colA1, 'C', (SELECT marque FROM 
    vehicule v WHERE v.oid=:new.vehicule_oid));

    Merci

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO tableB (colB1, colB2, colB3) 
    SELECT :new.colA1, 'C', marque 
    FROM vehicule v 
    WHERE v.oid=:new.vehicule_oid;

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2006
    Messages : 15
    Points : 13
    Points
    13
    Par défaut Pas mieux
    Lors de la compilation, le message suivant est affiché : Failed to commit: Paramètre IN ou OUT absent dans l'index :: 1.
    Quand je replace les :new.id et :new.vehicule_oid par des constantes, cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO tableB (colB1, colB2, colB3) 
    SELECT 10, 'C', marque 
    FROM vehicule v 
    WHERE v.oid=150;
    Si quelqu'un a une solution... J'ai pourtant l'impression que c'est assez "standard" comme besoin, mais impossible de trouver la solution. J'ai essayé en passant par une variable, mais j'ai le même problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DECLARE var1 NUMBER(10);
    BEGIN
        var1:=:new.vehicule_oid
    Cela génère la même erreur

    Merci encore

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2006
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Après quelques tests, voici la conclusion, la création du trigger ne s'effectue pas correctement si exécutée via dbVisualizer ou même l'enterprise manager Web d'Oracle 10G.
    Par contre, la création s'effectue très bien avec Toad...

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/07/2009, 17h10
  2. getattr() ? Appel d'une fonction depuis une fonction
    Par frites.saucisse dans le forum Général Python
    Réponses: 8
    Dernier message: 10/10/2008, 14h21
  3. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  4. Réponses: 3
    Dernier message: 16/01/2006, 16h02
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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