Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Consulta PL/SQL em string delimitada por vírgula


Uma variável de vinculação vincula a valor, neste caso a string '45,4932,20,19'. Você pode usar SQL dinâmico e concatenação como sugerido por Randy, mas você precisaria ter muito cuidado para que o usuário não pudesse modificar esse valor, caso contrário, você teria um problema de injeção de SQL.

Uma rota mais segura seria colocar os IDs em uma coleção do Apex em um 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;

Em seguida, altere sua consulta para:
SELECT * FROM users u WHERE u.user_id IN 
(SELECT c001 FROM apex_collections
 WHERE collection_name = 'P5_ID_COLL')