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

PL/SQL Oracle Discussion :

Variable CHAR dans EXECUTE IMMEDIATE [9i]


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut Variable CHAR dans EXECUTE IMMEDIATE
    Bonjour,

    J'arrive à créer correctement la procédure stockée suivante :

    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
    CREATE OR REPLACE PROCEDURE PH_SEQ5
        (
            MyPeriode CHAR
        )
     
    IS
     
        -- Déclaration variables locales
        stSql VARCHAR2(3000);
     
        BEGIN
            stSql:='CREATE OR REPLACE VIEW PH_VUE_TEMP AS SELECT * FROM PH_EMI_AG WHERE TRTPER_PNU='||MyPeriode;
            EXECUTE IMMEDIATE (stSql);
        END;
     
    /
    Mais à l'exécution avec une variable alphanumérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CALL PH_SEQ5('2012H38');
    J'obtiens l'erreur :
    CALL PH_SEQ5('2012H38')
    Error at line 33
    ORA-00933: SQL command not properly ended
    ORA-06512: at "A263.PH_SEQ5", line 17
    Si j'exécute le code suivant ça marche : Dans la table PH_EMI_AG, le champ TRTPER_PNU est de type VARCHAR2(7).

    J'ai essayé différentes combinaisons avec les quotes sans succès.

    Si quelqu'un a une idée, je suis preneur.

    Merci.

  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
    Comme bien souvent, afficher la chaîne à exécuter vous mettra la puce à l'oreille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE PROCEDURE PH_SEQ5 (MyPeriode CHAR)
    IS
        -- Déclaration variables locales
        stSql VARCHAR2(3000);
     
        BEGIN
            dbms_output.enable;
            stSql:='CREATE OR REPLACE VIEW PH_VUE_TEMP AS SELECT * FROM PH_EMI_AG WHERE TRTPER_PNU='||MyPeriode;
            dbms_output.put_line (stSql);
            -- EXECUTE IMMEDIATE (stSql);
        END;
    /

  3. #3
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Merci Waldar, j'y ai bien pensé mais je ne vois pas le résultat du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbms_output.put_line (stSql);
    s'afficher.

    J'ai essayé de mettre mais je n'ai pas réussi à voir la valeur de stSql.

  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
    Même avec le dbms_output.enable dans la procédure stockée ?

  5. #5
    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
    Enfin sinon je vous le fais le dbms_output :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CALL PH_SEQ5('2012H38');
     
    CREATE OR REPLACE VIEW PH_VUE_TEMP AS SELECT * FROM PH_EMI_AG WHERE TRTPER_PNU=2012H38
     
    CALL PH_SEQ5(4);
     
    CREATE OR REPLACE VIEW PH_VUE_TEMP AS SELECT * FROM PH_EMI_AG WHERE TRTPER_PNU=4

  6. #6
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Je viens de voir la valeur de stSql.

    Il manque des quotes avant et après.

  7. #7
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    C'est bon,
    ça marche avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     stSql:='CREATE OR REPLACE VIEW PH_VUE_TEMP AS SELECT * FROM PH_EMI_AG WHERE TRTPER_PNU='''||MyPeriode||'''';
    Merci.


  8. #8
    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
    Maintenant que le problème de départ est résolu, j'attire votre attention sur la relative inutilité de cette procédure, je ne comprends pas vraiment la nécessité de créer un objet Oracle simplement pour appliquer un filtre.

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

Discussions similaires

  1. Utiliser une variable char dans une condition
    Par cedriclv dans le forum C
    Réponses: 6
    Dernier message: 11/06/2014, 18h38
  2. Modif d'une variable char* dans une fonction
    Par kase74 dans le forum Débuter
    Réponses: 4
    Dernier message: 22/01/2009, 08h31
  3. Réponses: 4
    Dernier message: 11/10/2007, 08h51
  4. Réponses: 1
    Dernier message: 14/02/2007, 17h08
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

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