Oracle
 sql >> Datenbank >  >> RDS >> Oracle

PL/SQL-Abfrage IN kommagetrennter Zeichenfolge

Eine Bindungsvariable bindet a Wert, in diesem Fall die Zeichenfolge '45,4932,20,19'. Sie könnten dynamisches SQL und Verkettung verwenden, wie von Randy vorgeschlagen, aber Sie müssten sehr vorsichtig sein, dass der Benutzer diesen Wert nicht ändern kann, andernfalls haben Sie ein Problem mit der SQL-Injektion.

Ein sichererer Weg wäre, die IDs in einem PL/SQL-Prozess in eine Apex-Sammlung zu stellen:

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;

Ändern Sie dann Ihre Abfrage in:

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