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 :

Utilisation de chaîne dans PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Utilisation de chaîne dans PL/SQL
    Bonjour,
    Je code une procèdure stockée sous oracle en utilisant le PL/SQL et je suis confronté à un problème de chaine de carartères. En effet je fait appel à un groupe de chaines de caractàre dans un select de ma procédure en utilisant l'opérateur 'IN'. Cependant je n'arrive pas à afficher ma requête correctement. Ce qui se trouve dans la parenthèse est sensé etre entre cote.
    Voici mon code
    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
    create or replace
    PROCEDURE TEST_PROC_BIS(TABLE_EIM_OU_REJET IN VARCHAR2,BATCH_NUM_INTERFACE VARCHAR2)
    IS
    FoundTable_1 VARCHAR(30);
    var_owner VARCHAR(30);
    l_query varchar2(1000);
    var_nb_lignes NUMBER;
    var_statut_eim_1 varchar(50):= 'IMPORTED';
    var_statut_eim_2 varchar(50):= 'DUP_RECORD_EXISTS';
    var_statut_eim_3 varchar(50):= 'DUP_RECORD_EXISTS_IN_EIM_TBL';
    var_statut_eim_4 varchar(50):= 'MERGED';
    var_statut_eim_5 varchar(50):= 'MERGED_INTO';
    var_statut_eim_6 varchar(50):= 'DELETED';
    var_existe_etape_eim_ou_rej EXCEPTION;
    BEGIN
    l_query := 'SELECT count(*) FROM ' ||TABLE_EIM_OU_REJET||' 
                    WHERE IF_ROW_BATCH_NUM='||BATCH_NUM_INTERFACE|| ' AND IF_ROW_STAT NOT IN
                                                                                          ('||var_statut_eim_1||','
                                                                                          ||var_statut_eim_2||','
                                                                                          ||var_statut_eim_3||','
                                                                                          ||var_statut_eim_4||','
                                                                                          ||var_statut_eim_5||','
                                                                                          ||var_statut_eim_6||')';                                                                          
                --EXECUTE IMMEDIATE l_query into var_nb_lignes;
                dbms_output.put_line(l_query);
    EXCEPTION 
        WHEN var_existe_etape_eim_ou_rej THEN dbms_output.put_line('Le nom de l etape : "'||TABLE_EIM_OU_REJET||'" n''est pas valide');    
    END;
    J'obteniens en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(*) FROM SIEBEL.EIM_CONTACT 
                    WHERE IF_ROW_BATCH_NUM=561212070 AND IF_ROW_STAT NOT IN
                                                                                          (IMPORTED,DUP_RECORD_EXISTS,DUP_RECORD_EXISTS_IN_EIM_TBL,MERGED,MERGED_INTO,DELETED)
    Donc je n'ai pas de cotes qui encadre mes chaines.(exemple 'IMPORTED','DUP_RECORD_EXISTS').

    Si vous avez une idée ou des suggestions. Elles seront les bienvenues.

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Il faut que tu doubles les quotes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     IF_ROW_STAT NOT IN ('''||var_statut_eim_1||'''...

  3. #3
    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
    Utilise des bind variable pour l'execute immediate, c'est plus propre.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Merci. ça marche. Par contre, je veux bien utiliser les bind variables mais je ne sais pas comment ça fonctionne donc si tu as un exemple ce serait pas mal. Encore merci!!!

  5. #5
    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
    Ca doit être dans les tuto ou la faq, mais voici l'exemple pour ta requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    execute immediate 'SELECT count(*) FROM ' ||TABLE_EIM_OU_REJET
    ||' WHERE IF_ROW_BATCH_NUM=:num'||BATCH_NUM_INTERFACE|| ' AND IF_ROW_STAT NOT IN (:v1, :v2, :v3, :v4, :v5, :v6)'
         INTO var_nb_lignes
         USING BATCH_NUM_INTERFACE, var_statut_eim_1, var_statut_eim_2, var_statut_eim_3, var_statut_eim_4, var_statut_eim_5, var_statut_eim_6;

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Ok, je te remercie. Je jette un coup d'oeil dans les tutos d'abord après je l'utilise.

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Tu fais pas vâchement d'efforts qu'en même...
    http://www.developpez.net/forums/d11...e/#post6502384

  8. #8
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Il faut que tu doubles les quotes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     IF_ROW_STAT NOT IN ('''||var_statut_eim_1||'''...
    Ou utilise l'opérateur Q
    http://www.sswug.org/articles/viewarticle.aspx?id=24332

  9. #9
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    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 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par Garuda Voir le message
    Ou utilise l'opérateur Q ...
    Très bonne idée, mais en français c'est encore mieux héhé !
    http://www.developpez.net/forums/d10...b/#post5802181

    En insistant sur le fait que cette possibilité a été introduite en 10g.

Discussions similaires

  1. utiliser une variable déclaré en delphi dans un sql
    Par jamdinhe dans le forum Bases de données
    Réponses: 12
    Dernier message: 28/06/2018, 09h32
  2. Utilisation de REPLACE() dans un programme PL/SQL
    Par Djene dans le forum PL/SQL
    Réponses: 8
    Dernier message: 10/12/2009, 11h30
  3. utiliser des espaces dans requêtes SQL, dans du VBA
    Par willy-78milles dans le forum VBA Access
    Réponses: 13
    Dernier message: 26/03/2009, 10h31
  4. Réponses: 6
    Dernier message: 26/02/2008, 11h58
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

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