CREATE TYPE split_data_row AS OBJECT (split_data VARCHAR2(4000));
CREATE TYPE split_data_table AS TABLE OF split_data_row;
CREATE OR REPLACE FUNCTION regexp_split_to_table (p_string VARCHAR2, p_pattern VARCHAR2)
RETURN split_data_table
IS
v_result split_data_table := split_data_table();
BEGIN
FOR i IN 1..REGEXP_COUNT(p_string, p_pattern) + 1 LOOP
v_result.EXTEND;
v_result(i) := split_data_row(REGEXP_SUBSTR(p_string, '[^'||p_pattern||']+', 1, i));
END LOOP;
RETURN v_result;
END regexp_split_to_table;
select * from table(regexp_split_to_table('John,Doe,Jane,Smith', ','));
CREATE TYPE split_data_row AS OBJECT (split_data VARCHAR2(4000));
CREATE TYPE split_data_table AS TABLE OF split_data_row;
CREATE OR REPLACE FUNCTION regexp_split_to_table (p_string VARCHAR2, p_pattern VARCHAR2)
RETURN split_data_table
IS
v_result split_data_table := split_data_table();
BEGIN
FOR i IN 1..REGEXP_COUNT(p_string, p_pattern) + 1 LOOP
v_result.EXTEND;
v_result(i) := split_data_row(REGEXP_SUBSTR(p_string, '[^'||p_pattern||']+', 1, i));
END LOOP;
RETURN v_result;
END regexp_split_to_table;
select * from table(regexp_split_to_table('John,Doe,Jane,Smith', ','));
参考这个返回table类型的例子改写试试