Oracle
 sql >> Baza danych >  >> RDS >> Oracle

używanie wartości oddzielonych przecinkami wewnątrz klauzuli IN dla kolumny NUMBER

Czy naprawdę musisz zwrócić listę rozdzielaną przecinkami? Ogólnie byłoby znacznie lepiej zadeklarować typ kolekcji

CREATE TYPE num_table
    AS TABLE OF NUMBER;

Zadeklaruj funkcję, która zwraca instancję tej kolekcji

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 następnie użyj tej kolekcji w zapytaniu

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

Możliwe jest również użycie dynamicznego SQL (co demonstruje @Sebas). Wadą tego jest jednak to, że każde wywołanie procedury generuje nową instrukcję SQL, którą należy ponownie przeanalizować przed wykonaniem. Wywiera również presję na pamięć podręczną biblioteki, co może spowodować, że Oracle usunie wiele innych instrukcji SQL wielokrotnego użytku, które mogą spowodować wiele innych problemów z wydajnością.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj nazwę procedury lub funkcji wywołującej w Oracle PL/SQL

  2. Czy konieczne jest wyrzucenie DbCommand po użyciu?

  3. Jak eksportować dane za pomocą Oracle SQL Developer?

  4. Grupuj wiele instrukcji SELECT podczas wywoływania Oracle z ADO.NET

  5. Generowanie dat między dwiema datami