Oracle
 sql >> Database >  >> RDS >> Oracle

Query PL/SQL IN stringa delimitata da virgole

Una variabile bind lega a valore, in questo caso la stringa '45,4932,20,19'. Potresti usare SQL dinamico e concatenazione come suggerito da Randy, ma dovresti stare molto attento che l'utente non sia in grado di modificare questo valore, altrimenti hai un problema di SQL Injection.

Un percorso più sicuro sarebbe inserire gli ID in una raccolta Apex in un processo 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;

Quindi cambia la tua query in:

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