Oracle
 sql >> Base de données >  >> RDS >> Oracle

Requête PL/SQL IN chaîne délimitée par des virgules

Une variable de liaison lie a valeur, dans ce cas la chaîne '45,4932,20,19'. Vous pouvez utiliser le SQL dynamique et la concaténation comme suggéré par Randy, mais vous devez faire très attention à ce que l'utilisateur ne puisse pas modifier cette valeur, sinon vous avez un problème d'injection SQL.

Un itinéraire plus sûr consisterait à placer les ID dans une collection Apex dans un processus PL/SQL :

declare
    array apex_application_global.vc_arr2;
begin
    array := apex_util.string_to_table (:P5_USER_ID_LIST, ',');
    apex_collection.create_or_truncate_collection ('P5_ID_COLL');
    apex_collection.add_members ('P5_ID_COLL', array);
end;

Modifiez ensuite votre requête en :

SELECT * FROM users u WHERE u.user_id IN 
(SELECT c001 FROM apex_collections
 WHERE collection_name = 'P5_ID_COLL')