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 :

EXECUTE IMMEDIATE + Oracle 8


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Par défaut EXECUTE IMMEDIATE + Oracle 8
    Bonjour,

    J'ai une procédure stockée dans laquelle j'utilise Execute immediate :

    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
     
    lv_sql_stmt := 'SELECT nsiret FROM dpa_marche_hist_acompte WHERE idenos = :1 ';
    IF Ora_nomht1 IS NULL THEN
       lv_where1 := ' AND nomht1 IS NULL';
    ELSE
       lv_where1 := ' AND nomht1 = :2';
    END IF;
    IF Ora_nomhl1 IS NULL THEN
       lv_where2 := ' AND nomhl1 IS NULL';
    ELSE
      lv_where2 := ' AND nomhl1 = :3';
    END IF;
    IF Ora_nstra IS NULL THEN
      lv_where3 := ' AND nstra IS NULL';
    ELSE
      lv_where3 := ' AND nstra = :4';
    END IF;
    IF Ora_eaetex IS NULL THEN
     lv_where4 := ' AND eaetex IS NULL';
    ELSE
     lv_where4 := ' AND eaetex = :5';
    END IF;
    IF Ora_dexemm IS NULL THEN
     lv_where5 := ' AND dexemm IS NULL;';
    ELSE
      lv_where5 := ' AND dexemm = :6;';
    END IF;
    lv_sql_stmt := lv_sql_stmt||lv_where1||lv_where2||lv_where3||lv_where4||lv_where5;
     
    EXECUTE IMMEDIATE lv_sql_stmt USING Ora_idenos,Ora_nomht1,Ora_nomhl1,Ora_nstra,Ora_eaetex,Ora_dexemm RETURNING lv_nsiret;
    Je souhaite récupérer la valeur de nsiret dans ma variable lv_nsiret.
    Est-ce que la syntaxe de mon execute immediate est correcte?
    J'ai le message d'erreur suivant :
    LINE/COL ERROR
    -------- -------------------------------------------------------------
    134/115 PLS-00103: Symbole "LV_NSIRET" rencontrÚ Ó la place d'un des
    symboles suivants :
    into
    Symbole "into" a ÚtÚ substituÚ Ó "LV_NSIRET" pour continuer.

  2. #2
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Citation Envoyé par davy.g
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF Ora_dexemm IS NULL THEN
     lv_where5 := ' AND dexemm IS NULL;';
    ELSE
      lv_where5 := ' AND dexemm = :6;';
    END IF;
    Le SQL dynamique ne supporte pas le point-virgule à la fin de l'instruction. Essaies de le supprimer des lignes présentées ci-dessus.
    Ce qui doit donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF Ora_dexemm IS NULL THEN
     lv_where5 := ' AND dexemm IS NULL';
    ELSE
      lv_where5 := ' AND dexemm = :6';
    END IF;
    Nicolas.

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Par défaut
    NON ! J'ai le même message d'erreur !
    Merci quand même !

  4. #4
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Citation Envoyé par davy.g
    NON ! J'ai le même message d'erreur !
    Merci quand même !
    Ok, mais il ne faux quand même pas le point-virgule.
    De plus dans ta commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE lv_sql_stmt USING Ora_idenos,Ora_nomht1,Ora_nomhl1,Ora_nstra,Ora_eaetex,Ora_dexemm RETURNING lv_nsiret;
    Essaies de remplacer RETURNING par INTO, ce doit être sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE statement INTO output_variables USING input_variables;
    Nicolas.

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Par défaut
    Merci !
    C'était bien ma syntaxe qui était incorrecte !!!

    Je n'ai plus de message d'erreurs !!!
    Merci Nicolas !

  6. #6
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Cool !

    Nicolas.

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

Discussions similaires

  1. EXECUTE IMMEDIATE et Compilation sous Oracle Sql Developer
    Par abdelhamidem dans le forum PL/SQL
    Réponses: 3
    Dernier message: 16/09/2008, 17h01
  2. Oracle 8i Execute immediate
    Par kangaxx dans le forum SQL
    Réponses: 5
    Dernier message: 20/11/2007, 14h12
  3. [Oracle 9iR2][PL/SQL] EXECUTE IMMEDIATE USING
    Par mainecoon dans le forum Oracle
    Réponses: 4
    Dernier message: 08/02/2007, 19h08
  4. [oracle 8.1.7] pbm de privilège avec execute immediate
    Par Nounoursonne dans le forum Oracle
    Réponses: 4
    Dernier message: 10/02/2006, 16h45
  5. limit et temps d'execution avec oracle et PHP
    Par dor_boucle dans le forum Oracle
    Réponses: 20
    Dernier message: 10/12/2005, 14h31

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