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 :

ma procedure ne s'execute pas


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut ma procedure ne s'execute pas
    bonjour a tous !
    voila mon probleme du jour :

    j'ai une procédure :

    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
     
    CREATE OR REPLACE PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU 
    (typeEntree IN VARCHAR2,datePlan IN VARCHAR2)
     
    is 
     
    var_plan VARCHAR2(50);
    var_date VARCHAR2(15);
    var_timestamp VARCHAR2(50);
     
    BEGIN
     
    var_plan:= 'PLANIF';
    var_timestamp:= TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
    var_date:= :new.DATEPLAN_0;
     
    EXECUTE IMMEDIATE
    '
    insert into NEGOCEX32.XSESSION XSS
    (XSS.SNUM_SES_0,XSS.STYPE_0,XSS.SDATE_0,XSS.STIMESTAMP_0)
    values
    ('' '',''PLANIF'',''' || var_date || ''',''' || var_timestamp || ''')
     
    ';
     
    END;
    /
    un trigger :

    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
     
     
    CREATE OR REPLACE TRIGGER NEGOCEX32.PLANIF_IU 
    AFTER 
    insert or update on NEGOCEX32.XPLANBPE 
    for each row  
     
     
    DECLARE
     
    var_type VARCHAR2(50);
    var_date VARCHAR2(15);
     
    begin 
     
    var_type:= 'PLANIF';
    var_date:= :new.DATEPLAN_0;
     
    VERIF_DOUBLON_PLANIF_IU(var_type,var_date);
     
    end;
    ils sont tous les deux testés il n'y a pas de pb de compilation.

    mais j'ai un truck bizzare quand je fait declencher mon trigger qui doit executer ma procédure VERIF_DOUBLON_PLANIF_IU il ne ce passe rien

    alors j'ai testé en ligne de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQL>execute VERIF_DOUBLON_PLANIF_IU('PLANIF','14/02/08');
    et la ça marche nikel je comprend pas pourkoi !? merci de votre aide

    PS/ ne cherchez pas l'utilité de la procédure car j'ai pas terminé

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    le EXECUTE IMMEDIATE est inutile déjà

    Essaye :

    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
    CREATE OR REPLACE PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU 
    (typeEntree IN VARCHAR2,datePlan IN VARCHAR2)
     
    IS 
     
    var_plan VARCHAR2(50);
    var_date VARCHAR2(15);
    var_timestamp VARCHAR2(50);
     
    BEGIN
     
    var_plan:= 'PLANIF';
    var_timestamp:= TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
    var_date:= :new.DATEPLAN_0;
     
    insert into NEGOCEX32.XSESSION XSS
    (XSS.SNUM_SES_0,XSS.STYPE_0,XSS.SDATE_0,XSS.STIMESTAMP_0)
    values
    (' ',var_plan,var_date || ','|| var_timestamp );
     
    END;
    /
    Sinon, t'as fait comment pour déclencher le trigger ? T'as essayé d'ajouter un DBMS_OUTPUT pour vérifier que tu passes bien dedans ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    pour declencher le trigger j'ai une requete update mais c'est vrai que j'ai pas essayé le DBMS_OUTPUT que je test de suite a toute !!
    et pour le execute immediate ben j'ai réussi à le faire marcher que comme ça, mais je test ta modif merci beaucoup

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    bon resultat des course j'arrive pas a faire marcher sans le execute immediate il me met des erreurs de compilation et j'ai ecrit la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbms_output.put_line('ok');
    et rien ne s'affiche sur aucun des deux dailleur peut etre je l'ecrit mal !?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par highs Voir le message
    il me met des erreurs de compilation
    Il faut les deviner ?

    Citation Envoyé par highs Voir le message
    et rien ne s'affiche sur aucun des deux dailleur
    Donc, le trigger ne se déclenche pas

    Citation Envoyé par highs Voir le message
    peut etre je l'ecrit mal !?
    si tu parles de ton orthographe, en effet

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    est-ce que le trigger est bien créé d'ailleurs... parce qu'il manque un / à la fin du code que tu as mis

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut alors les réponses dans l'ordre
    les erreurs sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SQL> execute VERIF_DOUBLON_PLANIF_IU('PLANIF','14/02/08');
    BEGIN VERIF_DOUBLON_PLANIF_IU('PLANIF','14/02/08'); END;
     
          *
    ERREUR à la ligne 1 :
    ORA-06550: Ligne 1, colonne 7 :
    PLS-00905: l'objet NEGOCEX32.VERIF_DOUBLON_PLANIF_IU n'est pas valide
    ORA-06550: Ligne 1, colonne 7 :
    PL/SQL: Statement ignored
     
     
    SQL> show err
    Pas d'erreur.
    je ne sais toujours pas si le trigger se déclenche car j'ai testé dans ma procédure de rajouter également :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbms_output.put_line('ok');
    et même si elle s'execute bien je n'est pas en sortie le 'ok'

    et note comme je m'applique pour écrire

    mais en se qui concerne le trigger si je met le corps de ma procédure dans mon trigger il execute bien ma requete !

    donc, pour ma part j'en deduis que c'est la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    VERIF_DOUBLON_PLANIF_IU(var_type,var_date);
    qui ne marche pas !!

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Points : 436
    Points
    436
    Par défaut
    Il faut faire plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from user_errors
    à la place de show errors
    Consultant et formateur Oracle

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    si le trigger n'est pas valide il ne risque pas de se déclencher et si la procédure sort en erreur elle ne risque pas de faire quoique ce soit ²

    que donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show err trigger NEGOCEX32.VERIF_DOUBLON_PLANIF_IU
    et note comme je m'applique pour écrire

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut alors je vais tout reprendre
    je reprend tout sinon tu va me prendre pour un urluberlu

    au tout debut j'ai créé un trigger :

    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
     
    CREATE OR REPLACE TRIGGER NEGOCEX32.PLANIF_IU 
    AFTER 
    insert or update on NEGOCEX32.XPLANBPE 
    for each row  
     
    DECLARE
     
    var_plan VARCHAR2(50);
    var_date VARCHAR2(15);
    var_timestamp VARCHAR2(50);
     
    begin
     
    var_plan:= 'PLANIF';
    var_timestamp:= TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
    var_date:= :new.DATEPLAN_0;
     
    EXECUTE IMMEDIATE 
    '
    insert into NEGOCEX32.XSESSION XSS 
    (XSS.SNUM_SES_0,XSS.STYPE_0,XSS.SDATE_0,XSS.STIMESTAMP_0) 
    values 
    ('' '',''PLANIF'',''' || var_date || ''',''' || var_timestamp || ''')
     
    ';
     
    end;
    /
    malgrés se fameux execute immediate il marché bien :

    en écrivant cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE XPLANBPE SET STATUT_0 = ' ', QTY_0 = '6', XTPS_VID_0 = 9, HEUREPLAN_0 = '1100', SITEFAB_0 = 'C01', XCAMION_0 = '217', XOBS_0 = ' ', TMPS_FAB_0 = 10, TMPS_ALLER_0 = 25, TMPS_RETR_0 = 25, XCHAUFF_0 = '637', CONFIRM_0 = ' ', TIMESTAMP_0 = '1202985933' WHERE NUMORI_0 = 'NOR-SXF0800593' AND REGROUP_0 = '192.168.10.179_3_1202823970';
    il m'inserer bien dans ma table XSESSION les données voulu !
    jusque là tous marché bien :

    le problème été que sur cet UPDATE il y avait trois lignes mis à jour, donc le trigger ce déclenché trois fois et donc insérait trois lignes dans ma table XSESSION ce qui me pose problème pour la suite de mon application.

    je me suis donc dit je vais créé une procédure qui va reprendre le code de mon trigger avec certaines conditions pour éviter d'avoir plusieurs lignes inséré dans XSESSION.

    j'écrit donc cette procédure : ( elle n'est pas terminé je précise )

    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
     
    CREATE OR REPLACE PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU 
    (typeEntree IN VARCHAR2,datePlan IN VARCHAR2)
     
    is 
     
    var_plan VARCHAR2(50);
    var_date VARCHAR2(15);
    var_timestamp VARCHAR2(50);
     
    BEGIN
     
    var_plan:= 'PLANIF';
    var_timestamp:= TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
    var_date:= datePlan;
     
    EXECUTE IMMEDIATE
    '
    insert into NEGOCEX32.XSESSION XSS
    (XSS.SNUM_SES_0,XSS.STYPE_0,XSS.SDATE_0,XSS.STIMESTAMP_0)
    values
    ('' '',''PLANIF'',''' || var_date || ''',''' || var_timestamp || ''')
     
    ';
     
    END;
    /
    et réécrit mon trigger de cette façon :

    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
     
    CREATE OR REPLACE TRIGGER NEGOCEX32.PLANIF_IU 
    AFTER 
    insert or update on NEGOCEX32.XPLANBPE 
    for each row  
     
    DECLARE
     
    var_type VARCHAR2(50);
    var_date VARCHAR2(15);
     
    begin 
     
    var_type:= 'PLANIF';
    var_date:= :new.DATEPLAN_0;
     
    VERIF_DOUBLON_PLANIF_IU(var_type,var_date);
     
    end;
     
     
    /
    et voilà ou est le problème il n'execute plus ma procédure !!

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par highs Voir le message
    je reprend tout sinon tu va me prendre pour un urluberlu
    trop tard

    je plaisante bien sûr

    Citation Envoyé par highs Voir le message
    je me suis donc dit je vais créé une procédure qui va reprendre le code de mon trigger avec certaines conditions pour éviter d'avoir plusieurs lignes inséré dans XSESSION.
    C'est pas plus simple de supprimer FOR EACH ROW ?

    J'aimerai quand même avoir les erreurs de compil

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut si si j'avais de suite pensé à ça !
    mais pb je ne peux plus utiliser mon " :NEW " et j'en ai absolument besoin.
    en supprimant le ' for each row ' j'aurai bien déclenclé une seule fois mon trigger sur la transaction, mais j'ai besoin de récupérer mon :NEWATEPLAN_0 qui même si il y a plusieurs lignes updaté ou inséré reste le même pour toutes les lignes !

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut je t'envoie les erreurs de compile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    SQL> SHOW err PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU;
    Erreurs pour PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU :
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    20/1     PL/SQL: SQL Statement ignored
    23/1     PLS-00395: nombre de valeurs erroné dans clause VALUES de
             l'instruction INSERT

  14. #14
    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
    A priori c'est l'instruction de l'execute immediate qui n'est pas compilée à cause des retours chariots.
    Je te conseille ceci :
    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
    CREATE OR REPLACE PROCEDURE NEGOCEX32.VERIF_DOUBLON_PLANIF_IU 
    (typeEntree IN VARCHAR2,datePlan IN VARCHAR2)
     
    IS 
     
    	var_plan VARCHAR2(50);
    	var_date VARCHAR2(15);
    	var_timestamp VARCHAR2(50);
    	var_insert VARCHAR2(2000);
     
    BEGIN
     
    	var_plan:= 'PLANIF';
    	var_timestamp:= TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
    	var_date:= datePlan;
        var_insert := 'INSERT INTO NEGOCEX32.XSESSION (SNUM_SES_0, STYPE_0, SDATE_0, STIMESTAMP_0)'
    	 ||' VALUES ('' '',''PLANIF'',''' || var_date || ''',''' || var_timestamp || ''')';
     
     
     	EXECUTE IMMEDIATE var_insert;
     
    END;
    /
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  15. #15
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Ca va aller bien plus vite si à la place des Sql dynamique innutiles t'utilise les SQL statique.

Discussions similaires

  1. Lsmod ne s'execute pas
    Par bmamine dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 25/11/2005, 16h45
  2. Mon getline ne s'execute pas.
    Par mail1789 dans le forum C++
    Réponses: 7
    Dernier message: 21/08/2005, 19h42
  3. help please[global.asa] il s'execute pas!
    Par thief dans le forum ASP
    Réponses: 6
    Dernier message: 24/03/2005, 13h10
  4. ShellExecuteEx ne s'execute pas à chaque fois??
    Par Gothico dans le forum MFC
    Réponses: 11
    Dernier message: 01/03/2005, 22h02
  5. [Kylix] Compilation OK Execution pas ok
    Par teurf dans le forum EDI
    Réponses: 14
    Dernier message: 03/12/2002, 15h10

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