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 :

Problème avec une requête en SQL dynamique


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Points : 52
    Points
    52
    Par défaut Problème avec une requête en SQL dynamique
    Bonjour à tous j'ai un souci avec l'exécution de ce 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
     
    declare
    cursor req is
    select table_name,column_name
    from user_tab_columns
    where data_type like '%CHAR%'
    and table_name like 'AGTNAT';
    --
    nomtable user_tab_columns.table_name%Type ;
    colonne  user_tab_columns.column_name%Type ;
    resultat integer := 0;
    requete varchar(512);
    begin
    open req;
    Loop
    fetch req into nomtable,colonne;
    requete := `select count (*) from` ||  nomtable || `where` || colonne || `like 'TOUJA%'`;
    execute immediate requete into resultat;
    if resultat > 0 then
       dbms_output.put_line ('table:'||nomtable||' colonne:'||colonne);
    end if;
    exit when req%NOTFOUND;
    end loop;
    close req;
    end ;
    L'exécution plante sur la déclaration de la requête. Celà me met:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ORA-06550: Ligne 16, colonne 12 :
    PLS-00103: Symbole "`" rencontré à la place d'un des symboles suivants :
     
       ( - + case mod new not null <an identifier>
       <a double-quoted delimited-identifier> <a bind variable> avg
       count current exists max min prior sql stddev sum variance
       execute forall merge time timestamp interval date
       <a string literal with character set specification>
       <a number> <a single-quoted SQL string> pipe
    Qui pourrais m'éclairer?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Salut,

    Pense aux espaces (après le from, avant et après le where, etc...) lorsque tu crées ta chaine de caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete := 'select count (*) from ' ||  nomtable || ' where ' || colonne || ' like ''TOUJA%''';
    Autre chose, tu n'utilises pas le bon délimiteur pour tes chaines de caractère. Ce n'est pas ` mais '.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    La remarque de Snipah sur les espaces me semble pertinente.
    De plus,toute quote que tu veux passer en tant que telle dans la chaîne de caractère doit être doublée, donc je pense que tu dois réécrire cette ligne (16) de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    requete := `select count (*) from` ||  nomtable || `where` || colonne || `like ''TOUJA%''`;
    De plus, tu as 2 types de quotes (` et '), il faudrait homogénéiser avec '. Je me demande d'ailleurs si ce n'est pas l'utilisation de ` qui génère le message d'erreur actuel (ligne 16, colonne 12...)

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Si, c'est ce caractère qui génère l'erreur. Oracle ne le reconnait pas comme délimiteur de chaîne, j'ai édité mon message pendant que tu écrivais le tien
    Je connais pas trop MySQL, mais il me semble que ` est un délimiteur mysql.

  5. #5
    Membre du Club Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Points : 52
    Points
    52
    Par défaut
    Merci Snipah ta syntaxe est la bonne. La raison de la présence des "`" dans ma requête est que je suis allé voir le tutoriel SQL dynamique natif est qu'il y a un exemple de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    LC$Requete := ‘Select count(*) From ‘ || PC$Table || ‘ where ‘ || PC$ClauseWhere ;
      EXECUTE IMMEDIATE LC$Requete INTO LN$Total ;
    Du coup ça a mis direct en vrac la requête. Pour l'histoire des quotes ce n'est pas la première fois que j'ai ce souci. mais je confonds avec les " comme solution.

    Merci à vous.

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

Discussions similaires

  1. Problème avec une requête dans SQL-Server
    Par krolis dans le forum Développement
    Réponses: 6
    Dernier message: 09/01/2011, 21h53
  2. [SQL] Problème avec une requête
    Par jcmskip dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/04/2007, 11h41
  3. [MySQL] Problème avec une requête SQL
    Par chobol dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 11/05/2006, 12h29
  4. [SQL Server]Problème avec une requête récursive
    Par evans dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/04/2006, 20h16
  5. [VB]Problème avec une requête SQL
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/03/2006, 17h47

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