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

pomocí hodnot oddělených čárkami uvnitř klauzule IN pro sloupec NUMBER

Opravdu potřebujete vrátit seznam oddělený čárkami? Obecně by bylo mnohem lepší deklarovat typ kolekce

CREATE TYPE num_table
    AS TABLE OF NUMBER;

Deklarujte funkci, která vrací instanci této kolekce

CREATE OR REPLACE FUNCTION get_nums
  RETURN num_table
IS
  l_nums num_table := num_table();
BEGIN
  for i in 1 .. 10
  loop
    l_nums.extend;
    l_nums(i) := i*2;
  end loop;
END;

a poté tuto kolekci použijte ve svém dotazu

SELECT *
  FROM users_table
 WHERE user_id IN (SELECT * FROM TABLE( l_nums ));

Je možné použít i dynamické SQL (což demonstruje @Sebas). Nevýhodou však je, že každé volání procedury vygeneruje nový příkaz SQL, který je třeba před provedením znovu analyzovat. Vyvíjí také tlak na mezipaměť knihovny, což může způsobit, že Oracle vyčistí spoustu dalších opakovaně použitelných příkazů SQL, což může způsobit spoustu dalších problémů s výkonem.



  1. Jak interpretovat hodnotu txid_current() PosgreSQL

  2. Jak vypočítat věk (v letech) na základě data narození a getDate()

  3. Funkce ASIN() v Oracle

  4. Vložit Aktualizační spouštěč, jak určit, zda vložit nebo aktualizovat