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 :

Erreur ORA-00907 Parenthèse de droite absente


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1
    Par défaut Erreur ORA-00907 Parenthèse de droite absente
    Quand je mets la function MATRIX dans ma query, j'ai une error du type ORA-00907
    quelqu'un sait comment résoudre ce problème?

    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
     search varchar2(4000):='';
    begin
         search:='select R.RESERVA_ID as ID,
    R.IQM_ID,
    M.PROJECT_NAME,
    R.DATE_START,
    R.DATE_END,
    R.USAGE,
    R.REQUESTED_BY, 
    R.REQUESTED_AREA,
    R.CREATED_BY,
    R.UPDATED_BY,
    R.UPDATED_DATE,
    V.SEARCH_STRING,
    MATRIX(''SELECT DISTINCT PRODUCT FROM TST_RESERVAS_PROD WHERE RESERVA_ID = ''||RESERVA_ID'')
    from qms.TST_RESERVAS_SEARCH_IQM, qms.TST_RESERVAS R , TST_RESERVAS_SEARCH_RES V, IQM_PROJECTS_MAIN M
    where R.IQM_ID = M.PROJECT_ID
    AND R.RESERVA_ID = V.ID 
    AND R.DATE_START  >= to_date (:P1_DATAINICIO,''DD-MM-YYYY'') 
    AND R.DATE_END  <= to_date (:P1_DATAFIM,''DD-MM-YYYY'') AND V.SEARCH_STRING LIKE  ''%' || UPPER(:P1_AMBIENTE) || '%''';         
    
     wwv_flow.debug(search) ;
     return search ;
    end;

  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
    Affichez simplement le contenu de votre variable search avec dbms_output, vous verrez que vous avez commis des erreurs dans le placement des apostrophes.

  3. #3
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Il doit manquer un '||' vers la fin de l'appel à la fonction MATRIX, juste avant les 2 apostrophes et la parenthèse fermante.

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    Essaie de remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MATRIX(''SELECT DISTINCT PRODUCT FROM TST_RESERVAS_PROD WHERE RESERVA_ID = ''||RESERVA_ID'')
     
    par 
    MATRIX(''SELECT DISTINCT PRODUCT FROM TST_RESERVAS_PROD WHERE RESERVA_ID = ''||R.RESERVA_ID)

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut Question
    Pourquoi ne pas utiliser un curseur au lieu de passer un gros text en varchar2?
    Ca permettra d'utiliser les bind variables, ce sera mieux au niveau du parse etc, et ca evitera ce genre de desagrement.

    Je ne vois pas ce qui bloque la comme ca.

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Lorsque vous utilisez du SQL dynamique vous devez avoir à l’esprit les deux règles d’or suivantes :

    1. Ajouter dans votre code PL/SQL la possibilité de voir le texte sql que vous avez formé avant de l’exécuter.
    2. Ne pas utiliser le SQL dynamique si vous pouvez l’éviter


    Si vous suivez la règle 1 vous saurez tout de suite où se trouve votre erreur (comme cela vous a déjà été conseillé par un des intervenants).

    Si vous suivez la règle 2, vous trouverez qu’il n’y a aucun intérêt à procéder comme vous le faites actuellement.

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Indépendamment des problèmes de quote ou même de la pertinance de la requête dynamique, il est préférable de ne pas appeler la fonction PL/SQL directement dans le SELECT, mais de passer par une sous-requête scalaire afin de profiter du cache de la sous-requête scalaire : On Caching and Evangelizing SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (select (MATRIX(''SELECT DISTINCT PRODUCT FROM TST_RESERVAS_PROD WHERE RESERVA_ID = ''||RESERVA_ID)) from dual) as matrix

Discussions similaires

  1. [VxiR2] erreur "ORA-00907 Parenthèse de droite absente"
    Par AST34RUN dans le forum Webi
    Réponses: 2
    Dernier message: 04/03/2014, 12h08
  2. ORA-00907 parenthèse de droite manquante?
    Par nephen dans le forum SQL
    Réponses: 2
    Dernier message: 06/05/2010, 15h43
  3. erreur ora-00907 avec oracle
    Par mehdiyou dans le forum SQL
    Réponses: 3
    Dernier message: 11/04/2008, 22h53
  4. ORA-00907: Parenthèse de droite absente
    Par billainfo dans le forum SQL
    Réponses: 2
    Dernier message: 26/08/2007, 15h56
  5. Erreur ORA-00907 Parenthèse de droite absente
    Par moumoutte32 dans le forum SQL
    Réponses: 5
    Dernier message: 13/06/2007, 12h10

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