: curseur avec table n'existant pas encore en paramètre [PLSQL Oracle] - SQL/NoSQL - Programmation
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.
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.
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);
Marsh Posté le 25-02-2004 à 14:23:23
manuhard a écrit : Voilà : |
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 .
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
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.