sql >> Database >  >> RDS >> Oracle

String gebruiken in Oracle opgeslagen procedure

Voor zover ik je probleem begrijp, heb je een methode nodig om een ​​door komma's gescheiden tekenreeks als invoer te accepteren, deze op te splitsen in een verzameling gehele getallen en vervolgens een getal (lees:geheel getal) te vergelijken met de waarden in deze verzameling.

Oracle biedt hoofdzakelijk drie soorten verzamelingen - varrays , geneste tabellen en associatieve arrays . Ik zou uitleggen hoe je een door komma's gescheiden tekenreeks omzet in een geneste tabel en deze gebruikt om te zoeken of te vergelijken.

Eerst moet u een objecttype in het schema definiëren. U kunt alleen query's met dit type schrijven als u het op schemaniveau definieert.

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

CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/

Definieer vervolgens een functie als volgt:

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;

U bent klaar met de DDL die nodig is voor deze taak. Nu kunt u eenvoudig uw vraag schrijven als:

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


  1. Android-apps verbinden met mysql-database

  2. Hoe vind je in Django een term die deel uitmaakt van een string in plaats van die string te bevatten?

  3. SELECT werkt niet bij gebruik van !=in WHERE-component (met GROUP BY en HAVING COUNT)

  4. Waarden uit twee tabellen in één tabel invoegen