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 :

Trigger avec Oracle


Sujet :

Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Injenieur informatique
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Injenieur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Par défaut Trigger avec Oracle
    Bonjour,

    S'il-vous-plaît, lorsque j'exécute cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE TRIGGER RAHT_a 
    BEFORE INSERT 
    ON AA 
    REFERENCING NEW AS New OLD AS Old 
    FOR EACH ROW 
    BEGIN 
    select RAH.NEXTVAL INTO :new.ID from dual; 
    END ;
    Une erreur s'affiche :
    ORA-01036: numéro/nom de variable interdit

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Pas de soucis en 11g :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    create table aa (id integer, col varchar2(10));
    -- Table created.
     
    create sequence RAH;
    -- Sequence created.
     
    CREATE OR REPLACE TRIGGER RAHT_a 
    BEFORE INSERT ON AA 
    REFERENCING NEW AS New OLD AS Old 
    FOR EACH ROW 
    BEGIN 
    SELECT RAH.NEXTVAL INTO :new.ID FROM dual; 
    END;
    /
    -- Trigger created.
     
    insert into aa (id, col) values (42355634, 'Test1');
    -- 1 row created.
     
    insert into aa (col)     values ('Test2');
    -- 1 row created.
     
    select * from aa;
     
            ID COL       
    ---------- ----------
             1 Test1     
             2 Test2     
     
    /*drop table aa;
     
    drop sequence rah;*/

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 462
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Pas de soucis en 11g
    Peut-être voulais-tu dire, à demi-mot, que ce n'est devenu possible qu'à partir d'Oracle 11 ?

    C'est effectivement une nouveauté notable de la 11.1 : on peut utiliser une séquence à tout endroit où une valeur numérique est valide.
    En particulier, on peut faire une affectation directe entre une variable et le NEXTVAL d'une séquence, sans passer par un SELECT INTO.
    http://docs.oracle.com/cd/E11882_01/...c.htm#CIHCBFIJ


    Par ailleurs, Tim Hall fournit un petit test qui montre que les deux syntaxes sont équivalentes du point de vue des performances.
    http://www.oracle-base.com/articles/...ql_expressions

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    Peut-être voulais-tu dire, à demi-mot, que ce n'est devenu possible qu'à partir d'Oracle 11 ?
    Non, j'ai simplement testé sur 11g (11.1.0.7) !
    Ce que je voulais faire comprendre, c'était surtout "quelle est votre version ?"

    Cela dit j'ai bien utilisé le SELECT INTO.

    Merci pour les liens !

    Edit : testé avec succès également sur 9.2.0.8

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    ORA-01036: numéro/nom de variable interdit
    C'est un problème d'exécution de requête avec un : qui est aussi un indicateur de bind variable.

    Je pense que c'est du à une mauvaise exécution du code. Comment est-il lancé ? Sous sql+, sqldev, etc.. ?

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 462
    Par défaut
    Citation Envoyé par Waldar Voir le message
    ... Cela dit j'ai bien utilisé le SELECT INTO...
    En V11, on peut désormais faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE TRIGGER RAHT_a 
    BEFORE INSERT ON AA 
    REFERENCING NEW AS New OLD AS Old 
    FOR EACH ROW 
    BEGIN 
        :new.ID := RAH.NEXTVAL; 
    END;
    /
    Mais effectivement, lecture trop rapide et idées confuses n'aidant pas, ma réponse ne correspond pas au problème signalé !

  7. #7
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    En V11, on peut désormais faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE TRIGGER RAHT_a 
    BEFORE INSERT ON AA 
    REFERENCING NEW AS New OLD AS Old 
    FOR EACH ROW 
    BEGIN 
        :new.ID := RAH.NEXTVAL; 
    END;
    /
    ...
    Oui, mais si je ne me trompe pas, en interne cela est traduit en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select sequence.nextval into :variable from dual
    Fait un tkprof.

Discussions similaires

  1. LEFT JOIN avec Oracle 8i ne va pas... doit utiliser (+)
    Par loikiloik dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 17h38
  2. Quel langage avec Oracle????
    Par djedje11 dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 16/03/2004, 12h15
  3. Réponses: 14
    Dernier message: 01/09/2003, 16h54
  4. Conseils pour developper une application avec Oracle
    Par belugha dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 02/06/2003, 17h03
  5. [Crystal Report 9] Changer de schéma avec Oracle
    Par sur_uix dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 14/11/2002, 13h19

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