create or replace type str_split is table of number;
create or replace function split_str(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN str_split
PIPELINED
AS
v_length NUMBER := LENGTH(p_string);
v_start NUMBER := 1;
v_index NUMBER;
BEGIN
WHILE(v_start <= v_length)
LOOP
v_index := INSTR(p_string, p_delimiter, v_start);
IF v_index = 0
THEN
PIPE ROW(SUBSTR(p_string, v_start));
v_start := v_length + 1;
ELSE
PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));
v_start := v_index + 1;
END IF;
END LOOP;
RETURN;
END split_str;

oracle编写一个分割字符串成数组函数,但是报错很奇怪,请大佬帮忙看看
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 树莓大王 2023-03-15 03:12关注
根据您提供的信息和错误提示,可以看出这个报错是因为在创建自定义类型 str_split 时,类型定义中使用了 number 类型,但是在函数的返回值类型中使用了此自定义类型。
根据 Oracle 文档,自定义类型中只能使用简单数据类型、嵌套表类型和其他嵌套记录类型,而不能使用用户定义类型,例如上述的 str_split 类型。因此,您需要使用一个已定义的简单数据类型,如 varchar2 或者 number。
更改 str_split 类型的定义中的 number 数据类型为一个已定义的简单数据类型,然后再运行函数,即可成功创建函数并正确地将字符串分割成数组。
解决 无用评论 打赏 举报