sql >> Databáze >  >> RDS >> Oracle

Dotaz PL/SQL V řetězci odděleném čárkou

Proměnná vazby váže a hodnotu, v tomto případě řetězec '45,4932,20,19'. Můžete použít dynamické SQL a zřetězení, jak navrhuje Randy, ale museli byste být velmi opatrní, aby uživatel nemohl tuto hodnotu upravit, jinak máte problém s vkládáním SQL.

Bezpečnější cestou by bylo vložit ID do kolekce Apex v procesu 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;

Poté změňte svůj dotaz na:

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


  1. Správa vysoké dostupnosti v PostgreSQL – Část II:Správce replikací

  2. PSQLException:Velké objekty nelze použít v režimu automatického potvrzení

  3. vložit výstup print_r do databáze?

  4. Mohu použít výjimky ve smyčce FOR LOOP k vynucení pokračování při chybě?