How to loop through a delimited list in Oracle PLSQL

后端 未结 4 1198
青春惊慌失措
青春惊慌失措 2021-01-01 05:40

I am working on an Oracle procedure that calls another procedure within it. One of my parameters (parm1) can contain one or more values in a comma separated lis

4条回答
  •  猫巷女王i
    2021-01-01 06:12

    There is a utility procedure COMMA_TO_TABLE and array type DBMS_UTILITY.UNCL_ARRAY dedicated for this task. Since Oracle 10g.

    It is well document here.

    Here is a sample solution:

    SET SERVEROUTPUT ON
    DECLARE
        csvListElm VARCHAR2(4000) := 'elm1, elm2,elm3 ,elm4 , elm5';
        csvListTable DBMS_UTILITY.UNCL_ARRAY;
        csvListLen BINARY_INTEGER;
        currTableName VARCHAR2(222);
    BEGIN
        DBMS_UTILITY.COMMA_TO_TABLE(csvListElm, csvListLen, csvListTable);
        FOR csvElm IN 1..(csvListTable.COUNT - 1) LOOP
            dbms_output.put_line('-- CSV element        : <'||csvListTable(csvElm)||'>');
            dbms_output.put_line('-- Trimmed CSV element: <'||trim(csvListTable(csvElm))||'>');
        END LOOP; 
    END;
    /
    

    Sample output:

    -- CSV element        : ;
    -- Trimmed CSV element: ;
    -- CSV element        : < elm2>;
    -- Trimmed CSV element: ;
    -- CSV element        : ;
    -- Trimmed CSV element: ;
    -- CSV element        : ;
    -- Trimmed CSV element: ;
    -- CSV element        : < elm5>;
    -- Trimmed CSV element: ;
    

提交回复
热议问题