S
Short and simple demo for using pipelined functions. Perfect way how to get content from PL/SQL procedure accessible in SQL as a table.
CREATE OR REPLACE FUNCTION string_split (
in_src VARCHAR2,
in_sep VARCHAR2
)
RETURN str_4k PIPELINED
AS
i PLS_INTEGER;
items VARCHAR2(32767) := in_src; -- TRIM(BOTH in_sep FROM in_src);
BEGIN
LOOP
i := INSTR(items, in_sep);
IF i > 0 THEN
PIPE ROW(SUBSTR(items, 1, i - 1));
items := SUBSTR(items, i + LENGTH(in_sep));
ELSE
PIPE ROW(items);
EXIT;
END IF;
END LOOP;
RETURN;
END;
/
Data type is needed but it can be stored in package specification.
CREATE TYPE string_4k AS TABLE OF VARCHAR2(4000); /
And finally SQL:
SELECT
ROWNUM AS position,
COLUMN_VALUE AS value
FROM TABLE (
string_split('A,B,C,,,D,E', ',')
);
Comments
Post a Comment