[PLSQL Oracle] : curseur avec table n'existant pas encore en paramètre

: curseur avec table n'existant pas encore en paramètre [PLSQL Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 24-02-2004 à 10:08:29    

J'ai un curseur, auquel je veux passer un paramètre, défini en VARCHAR2 (mon but est de construire ma chaîne SQL en dynamique)  
 
J'ai en effet une table temporaire qui n'existe pas encore, donc je ne peux la déclarer dans le curseur.  
Je la crée avant le traitement, et la détruit après le traitement.
 
La partie de la requête concernée est :  
AND monChamp NOT IN (paramTableTemporaire);  
 
Quand j'ouvre mon curseur :  
OPEN MonCurseur_CUR('SELECT monChamp FROM maTable');  
 
 
J'ai l'erreur Oracle ORA-01722 : nombre non valide.  
 
Le problème vient des cotes, si j'exécute la requête SQL et que j'enlève les cotes entre le SELECT et maTable, il n'y a pas d'erreur.  
 
Comment faire ?
 
Merci d'avance.

Reply

Marsh Posté le 24-02-2004 à 10:08:29   

Reply

Marsh Posté le 24-02-2004 à 10:30:59    

Lz plus simple, tu cré ta table, tu cré ta procédure, tu compile ta procédure, tu supprime la table et c'est fini. Pas besoin de faire du dinamic.


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 24-02-2004 à 11:00:33    

Et si je veux faire du dynamique ?  :)

Reply

Marsh Posté le 25-02-2004 à 13:53:44    

manuhard a écrit :

Et si je veux faire du dynamique ?  :)  


bon ben fais voir ton code pour voir ce qui va pas.


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 25-02-2004 à 14:15:32    

Voilà :
 
OPEN MONCURSEUR_CUR('SELECT monChamp FROM maTable');
 
 
Le curseur est défini comme suit :
 
SELECT CHAMPS
FROM   TABLES
WHERE  ...
AND    monChamp NOT IN (paramTableTemporaire);


Message édité par manuhard le 25-02-2004 à 14:17:22
Reply

Marsh Posté le 25-02-2004 à 14:23:23    

manuhard a écrit :

Voilà :
 
OPEN MONCURSEUR_CUR('SELECT monChamp FROM maTable');
 
 
Le curseur est défini comme suit :
 
SELECT CHAMPS
FROM   TABLES
WHERE  ...
AND    monChamp NOT IN (paramTableTemporaire);
 


Ca, ca n'a aucun sens : après le not in, il attend une liste de valeur. Ici tu lui a mis une variable paramTableTemporaire, la requete qui va donc être executé sera
SELECT CHAMPS
FROM   TABLES
WHERE  ...
AND    monChamp NOT IN ('SELECT monChamp FROM maTable');c'est à dire que ton paramètre reste juste une chaine de caractère et ne peux pas être interpreté comme une requete SQL.( et non pas
SELECT CHAMPS
FROM   TABLES
WHERE  ...
AND    monChamp NOT IN SELECT monChamp FROM maTable;
comme tu le souhaite. )
En PL/SQL tu ne peux pas faire des requête dinamiquement de cettte manière. La seule méthode possbile est d'utiliser le package dbms_sql .


Message édité par tomlameche le 25-02-2004 à 14:24:50

---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 25-02-2004 à 14:40:59    

Regarde avec EXECUTE_IMMEDIATE je crois que tu peux le faire, mais je me souviens plus si j'avais réussi, je n'ai pas Oracle ici pour essayer


Message édité par alalex le 25-02-2004 à 14:41:08

---------------
-= Team RC5-72 =-  -= Team Dolphin Project =-
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed