Oracle
 sql >> Datenbank >  >> RDS >> Oracle

String in gespeicherter Oracle-Prozedur verwenden

Soweit ich Ihr Problem verstehe, benötigen Sie eine Methode, um eine durch Kommas getrennte Zeichenfolge als Eingabe zu akzeptieren, sie in eine Sammlung von Ganzzahlen zu zerlegen und dann eine Zahl (sprich:Ganzzahl) mit den Werten in dieser Sammlung zu vergleichen>

Oracle bietet hauptsächlich drei Arten von Sammlungen an - varrays , verschachtelte Tabellen und assoziative Arrays . Ich würde erklären, wie man eine durch Kommas getrennte Zeichenfolge in eine verschachtelte Tabelle umwandelt und sie zum Abfragen oder Vergleichen verwendet.

Zuerst müssen Sie einen Objekttyp im Schema definieren. Sie können Abfragen mit diesem Typ nur schreiben, wenn Sie ihn auf Schemaebene definieren.

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

CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/

Als nächstes definieren Sie eine Funktion wie diese:

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;

Sie sind mit der für diese Aufgabe erforderlichen DDL fertig. Jetzt können Sie Ihre Abfrage einfach schreiben als:

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