Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/10/2011, 13h26   #1
Invité de passage
 
Homme
Développeur informatique
Inscription : 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
Points : 0
Points : 0
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 :
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;
Magic_IP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 18h00   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Affichez simplement le contenu de votre variable search avec dbms_output, vous verrez que vous avez commis des erreurs dans le placement des apostrophes.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 21h39   #3
Membre éprouvé
 
Avatar de xdescamp
 
Homme Xavier Descamps
Inscription : octobre 2008
Messages : 297
Détails du profil
Informations personnelles :
Nom : Homme Xavier Descamps
Âge : 36
Localisation : France, Nord (Nord Pas de Calais)

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

Informations forums :
Inscription : octobre 2008
Messages : 297
Points : 422
Points : 422
Envoyer un message via Skype™ à xdescamp
Il doit manquer un '||' vers la fin de l'appel à la fonction MATRIX, juste avant les 2 apostrophes et la parenthèse fermante.
xdescamp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 22h59   #4
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

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

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Essaie de remplacer

Code :
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)
__________________
Publications: http://schelabi.developpez.com/
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 09h09   #5
Membre expérimenté
 
François
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 306
Points : 536
Points : 536
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.
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 11h13   #6
Membre expérimenté
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 286
Points : 563
Points : 563
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.
__________________
Bien Cordialement
www.hourim.wordpress.com
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 18/10/2011, 11h19   #7
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
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 :
(SELECT (MATRIX(''SELECT DISTINCT PRODUCT FROM TST_RESERVAS_PROD WHERE RESERVA_ID = ''||RESERVA_ID)) FROM dual) AS matrix
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h34.


 
 
 
 
Partenaires

Hébergement Web