Bonjour,

Je débute sous Oracle, je connais bien SQL Server et j'avoue que le passage sur ce nouveau sgbd ne se fait pas en douceur pour moi .

Je cherche à écrire une procédure stockée avec en paramètre d'entrée une liste du type 'A,B,C'
Je souhaite lister tous les enregistrements d'une table avec une condition sur cette liste

Du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT categ from MATABLE WHERE categ IN ('A','B','C')
mais avec un paramètre pour la liste.

J'ai pondu ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create or replace PROCEDURE X_TEST (
  P_LISTE IN VARCHAR2,
  p_cursor OUT sys_refcursor
)
AS 
BEGIN
  OPEN p_cursor FOR
 
  select categ from MATABLE 
  WHERE 
  categ IN 
  (
   SELECT regexp_substr(P_LISTE,'[^,]+', 1, level) as c FROM dual
   connect BY regexp_substr(P_LISTE, '[^,]+', 1, level) IS NOT NULL
  );
 
END X_TEST;
Appel à la procédure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
VARIABLE rc REFCURSOR;
execute X_TEST('A,C',:rc);
print  rc;
Cela fonctionne bien mais je souhaite vérifier si il n'existe pas une solution plus simple, si je ne suis pas trop à "coté de la plaque" en terme de bonnes pratiques...

Merci d'avance.