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

Използване на низ в съхранена процедура на Oracle

Доколкото разбирам проблема ви, имате нужда от метод за приемане на низ, разделен със запетая, като вход, разделянето му на колекция от цели числа и след това сравняване на число (да се чете:цяло число) със стойностите в тази колекция.

Oracle предлага основно три типа колекции - варианти , вложени таблици и асоциативни масиви . Бих обяснил как да преобразувам низ, разделен със запетая, във вложена таблица и да я използвам за заявка или сравнение.

Първо, трябва да дефинирате тип обект в схемата. Можете да пишете заявки, използвайки този тип, само ако го дефинирате на ниво схема.

CREATE OR REPLACE TYPE entity_id AS OBJECT (id_val NUMBER(28));
/

CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/

След това дефинирайте функция като тази:

FUNCTION comma_to_nt_integer (p_comma_delimited_str IN VARCHAR)
    RETURN entity_id_set IS
    v_table     entity_id_set;
BEGIN
    WITH temp AS (SELECT TRIM(BOTH ',' FROM p_comma_delimited_str) AS str FROM DUAL)
        SELECT ENTITY_ID(TRIM (REGEXP_SUBSTR (t.str,
                                    '[^,]+',
                                    1,
                                    LEVEL)))
                   str
          BULK COLLECT INTO v_table
          FROM temp t
    CONNECT BY INSTR (str,
                      ',',
                      1,
                      LEVEL - 1) > 0;

    RETURN v_table;
END comma_to_nt_integer;

Вие сте готови с DDL, необходим за тази задача. Сега можете просто да напишете вашата заявка като:

SELECT *
  FROM ..  
 WHERE ...
       AND gfcid in (table(comma_to_nt_integer(GDFCID_STRING)));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 46 Контролни файлове за SQL Loader

  2. Как да направя заявка за разрешения за директория на Oracle?

  3. Как мога да конфигурирам местоположението на моя файл tnsnames на Oracle?

  4. проблем при намирането на списък с файлове в директорията

  5. Обикновено SELECT с променлива, но без INTO