[Oracle 10.2] PL/SQL Paramètre Curseur

PL/SQL Paramètre Curseur [Oracle 10.2] - SQL/NoSQL - Programmation

Marsh Posté le 31-01-2007 à 15:19:00    

Bonjour,
 
j'aimerais savoir si il est possible d'utiliser un paramètre dans un curseur qui me permettent de mofifier la requete :
 

Code :
  1. -- Déclaration du curseur
  2.     CURSOR C1 IS
  3.        SELECT MAX(table.champs) AS ch1
  4.        FROM table
  5.  
  6.     lireC1 C1 %ROWTYPE;


J'aimerais passer en paramètre dans un cuseur une variable qui me permette de changer la fonction MAX en MIN.
 
Quelquechose qui ressemblerait à dans l'esprit :

Code :
  1. CURSOR C1 (v1 VARCHAR) IS
  2.        SELECT v1(table.champs) AS ch1
  3.        FROM table
  4.  
  5.     lireC1 C1 %ROWTYPE;


 
Est-ce possible ?


Message édité par hugo25 le 31-01-2007 à 15:20:30
Reply

Marsh Posté le 31-01-2007 à 15:19:00   

Reply

Marsh Posté le 31-01-2007 à 20:35:45    

Euh cela m'étonnerait fortement...
 
Pourquoi plutot ne pas faire deux curseurs C1 et C2 et faire le choix de celui que tu vas ouvrir dans un IF en fonction de ton paramètre ?
 
Ou encore sélectionner le MIN et le MAX dans ton curseur, et choisir la colonne que tu souhaites utiliser après lors de ton traitement ?

Reply

Marsh Posté le 31-01-2007 à 20:46:01    

darkfrost a écrit :

Euh cela m'étonnerait fortement...
 
Pourquoi plutot ne pas faire deux curseurs C1 et C2 et faire le choix de celui que tu vas ouvrir dans un IF en fonction de ton paramètre ?


il y a du code dans le FOR, donc duplication de ce code. A moins que je n'ai pas compris ta suggestion ?
 

darkfrost a écrit :

Ou encore sélectionner le MIN et le MAX dans ton curseur, et choisir la colonne que tu souhaites utiliser après lors de ton traitement ?

Oui, ca j'y ai pensé.
En fait j'ai résolu le problème en utilisant la fonction decode(variable, valeur1, traitement1, valeur2, traitement2,...).
Cette requête retournant plusieurs milliers de ligne, je ne sais pas quelle est le plus optimisé : utiliser décode dans la requête du curseur ou séléctionné le min et le max et choisir ensuite.

Reply

Marsh Posté le 01-02-2007 à 16:58:06    

hugo25 a écrit :

il y a du code dans le FOR, donc duplication de ce code. A moins que je n'ai pas compris ta suggestion ?


 
Ben oui mais perso une duplication de code dans ce but précis ça ne me gène pas, à partir du moment ou tu n'ouvres qu'un seul des deux curseurs. Je dirais qu'apres c'est plus un soucis d'esthetisme...
 

hugo25 a écrit :


Oui, ca j'y ai pensé.
En fait j'ai résolu le problème en utilisant la fonction decode(variable, valeur1, traitement1, valeur2, traitement2,...).
Cette requête retournant plusieurs milliers de ligne, je ne sais pas quelle est le plus optimisé : utiliser décode dans la requête du curseur ou séléctionné le min et le max et choisir ensuite.


 
J'aurais tendance à dire qu'un DECODE pèse beaucoup moins lourd que la récupèration inutile d'une de tes deux colonnes (MIN ou MAX) comme je te l'avais proposé. Donc je resterai sur ta solution ;) !

Reply

Marsh Posté le 01-02-2007 à 22:31:30    

ou bien tu fais du sql dynamique, comme ton curseur ne te sert que a retourner une valeur cela marchera tres bien.

Reply

Sujets relatifs:

Leave a Replay

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