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

Używanie ciągu znaków w procedurze składowanej Oracle

O ile rozumiem twój problem, potrzebujesz metody, która zaakceptuje ciąg znaków oddzielonych przecinkami jako dane wejściowe, podzieli go na zbiór liczb całkowitych, a następnie porówna liczbę (czytaj:integer) z wartościami w tej kolekcji.

Oracle oferuje głównie trzy rodzaje kolekcje - varrays , tabele zagnieżdżone i tablice asocjacyjne . Wyjaśniłbym, jak przekonwertować ciąg rozdzielany przecinkami na zagnieżdżoną tabelę i użyć go do zapytania lub porównania.

Najpierw musisz zdefiniować typ obiektu w schemacie. Możesz pisać zapytania używając tego typu tylko wtedy, gdy zdefiniujesz go na poziomie schematu.

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

CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/

Następnie zdefiniuj taką funkcję:

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;

Skończyłeś z DDL wymaganym do tego zadania. Teraz możesz po prostu napisać swoje zapytanie jako:

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. Oracle Uzyskać tylko czas od To_Date() w zapytaniu?

  2. Podział chmury Oracle — koszty hostingu bazy danych w OCI

  3. Optymalizacja kodu w PL/SQL. Dokonywanie tego do właściwego. Kod działa, ale nie jest prawidłowy

  4. Błąd System.Data.OracleClient wymaga oprogramowania klienta Oracle w wersji 8.1.7 lub nowszej podczas instalacji instalacji

  5. Uzyskaj całkowitą liczbę wierszy w ORACLE, a następnie uzyskaj tylko 4 wyniki