devstory

Séparer les chaînes séparées par des virgules et passer à la clause IN de l'instruction select dans Oracle

  1. Example

1. Example

Dans certaines situations, vous avez une chaine (String), par exemple :
'KING,JONES,FORD'
Vous voulez le transformer en une instruction Select et recevoir des résultats comme l'illustration ci-dessous :
Avec Oracle > 9, vous pouvez écrire la requête SQL comme ci-dessous :
-- ORACLE > 9.x

 Select Regexp_Substr('KING,JONES,FORD'
                     ,'[^,]+'
                     ,1
                     ,Level) Emp_Name
 From   Dual
 Connect By Regexp_Substr('KING,JONES,FORD'
                         ,'[^,]+'
                         ,1
                         ,Level) Is Not Null;
Cherchez les employés nommés dans une chaine séparée par la virgule.
Select * From Employee Emp
Where
Emp.Emp_Name In ('KING','JONES','FORD');
Vous devez combiner deux instructions imbriquées :
Select *
From   Employee Emp
Where  Emp.Emp_Name In
      (Select Regexp_Substr('KING,JONES,FORD'
                           ,'[^,]+'
                           ,1
                           ,Level) Emp_Name
       From   Dual
       Connect By Regexp_Substr('KING,JONES,FORD'
                               ,'[^,]+'
                               ,1
                               ,Level) Is Not Null);
Les résultats de l'exécution de l'instruction :