[Oracle] Passer un paramètre à un curseur.

Passer un paramètre à un curseur. [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 01-10-2008 à 15:03:27    

J'ai un curseur comme suit :
 

Code :
  1. CURSOR cur_forest IS
  2. SELECT * FROM MaTable
  3. WHERE MonChamps = valeur;


 
Seulement ce curseur se trouve dans une boucle et d'une itération à l'autre la variable valeur peut changer. J'aimerais donc passer cette valeur en paramètre de mon curseur.
 
 
Quand je codais en 4GL il me suffisait de faire 'WHERE MonChamps = ?' puis d'utiliser un 'USING UneValeur' lors de l'OPEN (ou du FETCH je me souviens plus trop).
 
Comment faire de même en PL/SQL Oracle ?


Message édité par Kirvel le 01-10-2008 à 15:03:51

---------------
MyAnimeList
Reply

Marsh Posté le 01-10-2008 à 15:03:27   

Reply

Marsh Posté le 01-10-2008 à 15:31:03    

Utiliser

CURSOR cur_forest (un_parametre CHAR) IS
SELECT * FROM MaTable
WHERE MonChamp = un_parametre;
...
OPEN cur_forest('abc');
FETCH ....

Reply

Marsh Posté le 01-10-2008 à 17:08:55    

olivthill a écrit :

Utiliser

CURSOR cur_forest (un_parametre CHAR) IS
SELECT * FROM MaTable
WHERE MonChamp = un_parametre;
...
OPEN cur_forest('abc');
FETCH ....



 
Merci, c'est tout con mais quand on sait pas la syntaxe on peut tourner longtemps des fois :D


---------------
MyAnimeList
Reply

Marsh Posté le 02-10-2008 à 15:03:58    

comment c'est trop pas clair la syntaxe oracle... :heink:
 
en t-sql au moins c'est une variable comme une autre, pas besoin de faire un truc pareil :/

Reply

Marsh Posté le 02-10-2008 à 15:07:14    

Oui, mais quand c'est pas toi qui décides si on tourne sur du SQL Server ou du Oracle, ben faut faire avec [:sisicaivrai]
Et encore, la syntaxe Oracle c'est une chose, SQLPlus c'en est une autre [:prozac]


---------------
MyAnimeList
Reply

Marsh Posté le 02-10-2008 à 15:23:26    

on peut ouvrir le curseur en mettant directement le paramètre dans le where

Reply

Marsh Posté le 02-10-2008 à 15:29:08    

casimimir a écrit :

on peut ouvrir le curseur en mettant directement le paramètre dans le where


Tu veux dire mettre directement la variable dans le curseur au moment de sa déclaration ?
Si c'est ça, non ça ne marche pas, j'avais essayé avant de poster ici. [:cosmoschtroumpf]


---------------
MyAnimeList
Reply

Marsh Posté le 02-10-2008 à 16:06:59    

ha, ben je suis en 9i et ca ca marche
 

Code :
  1. FOR c1row IN (select balbla
  2.                         from tablebrol a
  3.                         where a.champ_brol = param)
  4. LOOP
  5.              c1row.blabla.....;           
  6. END LOOP;


 
ou alors le le cursor dans le bloc declare avec une des paramètres d'entrée de ma procédure mis dans le where
 

Reply

Marsh Posté le 02-10-2008 à 16:18:50    

casimimir a écrit :

ha, ben je suis en 9i et ca ca marche
 

Code :
  1. FOR c1row IN (select balbla
  2.                         from tablebrol a
  3.                         where a.champ_brol = param)
  4. LOOP
  5.              c1row.blabla.....;           
  6. END LOOP;


 
ou alors le le cursor dans le bloc declare avec une des paramètres d'entrée de ma procédure mis dans le where
 


Ya pas de curseur dans ton exemple :heink:
Même si le principe est en gros le même :o
 
EDIT : je suis en 10g


Message édité par Kirvel le 02-10-2008 à 16:19:13

---------------
MyAnimeList
Reply

Marsh Posté le 02-10-2008 à 16:27:09    

oué 'fin c'est un curseur qu'il y a derrière hein

Reply

Marsh Posté le 02-10-2008 à 16:27:09   

Reply

Marsh Posté le 02-10-2008 à 17:15:16    

Les curseurs, c'est le mal incarné :/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-10-2008 à 17:53:56    

casimimir a écrit :

oué 'fin c'est un curseur qu'il y a derrière hein


oui, mais là c'est quand même moins puissant qu'un curseur : t'es en more forward_only / read_only / static alors qu'avec un vrai curseur t'as un accès direct aux données, avec possibilité de modifications/notifications des changements

Reply

Marsh Posté le 03-10-2008 à 09:46:48    

bonbonbon, ca c'est bon?
 
 
 

Code :
  1. procedure test is
  2.    TYPE test_curtype IS REF CURSOR RETURN spinfo.test%ROWTYPE;
  3.    test_curvar test_curtype;
  4.    test_rec spinfo.test%ROWTYPE;
  5.  
  6.    une_var number;
  7. BEGIN
  8.    OPEN test_curvar FOR SELECT * FROM spinfo.test where champ = une_var for update;
  9.    FETCH test_curvar INTO test_rec;
  10.    CLOSE test_curvar;
  11. END;

Reply

Sujets relatifs:

Leave a Replay

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