Oracle
 sql >> база данни >  >> RDS >> Oracle

Изпращане на стойности, разделени със запетая, към клауза WHERE в съхранена процедура на Oracle

В идеалния случай, вместо да подадете единичен низ, съставен от стойности, разделени със запетая, бихте предали колекция. Ако имате нещо като

CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);

тогава можете да прехвърлите тази колекция във вашата процедура и да я използвате в WHERE клауза

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;

Ако наистина трябва да предадете низ, разделен със запетая, можете да дефинирате същия тип колекция и след това да анализирате низа, за да попълните колекцията, като използвате нещо като str2tbl на Tom Kyte функция . Но това ще бъде по-малко ефективно от подаването на колекция като начало.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Искам да дам разрешения на потребител да вижда EMP таблицата

  2. Как да избегнете грешка ORA-04091 в рамките на тригер

  3. Защо статичният ddl не е разрешен в PL/SQL?

  4. Объркване с Oracle CONNECT BY

  5. изчакване на връзката с jboss база данни при неактивност в oracle