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

Wysyłanie wartości rozdzielanych przecinkami do klauzuli WHERE w procedurze składowanej Oracle

W idealnym przypadku zamiast przekazywania pojedynczego ciągu składającego się z wartości oddzielonych przecinkami, należy przekazać kolekcję. Jeśli masz coś takiego

CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);

wtedy możesz przekazać tę kolekcję do swojej procedury i użyć jej w WHERE klauzula

CREATE OR REPLACE PROCEDURE procedure_name( p_values IN value_tbl )
AS
  ...
BEGIN
  FOR i IN (SELECT *
              FROM table_name
             WHERE column_name IN (SELECT *
                                     FROM TABLE( p_values )))
  LOOP
    ...
  END LOOP;
END;

Jeśli naprawdę musisz przekazać ciąg oddzielony przecinkami, możesz zdefiniować ten sam typ kolekcji, a następnie przeanalizować ciąg, aby zapełnić kolekcję, używając czegoś takiego jak str2tbl Toma Kyte'a funkcja . Ale będzie to mniej wydajne niż przekazywanie kolekcji na początek.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainstalować moduł node-oracledb na AWS centos6 za pomocą wiersza poleceń?

  2. Jak wyłączyć wygaśnięcie hasła Oracle?

  3. ładowanie ogromnych danych XLS do Oracle za pomocą Pythona

  4. Wywołanie procedury składowanej Oracle z parametrem wyjściowym z SQL Server

  5. Czy jest jakiś powód, aby używać jednocześnie klucza podstawowego i klucza unikatowego w tym samym polu?