K丨T 2020-02-25 16:42 采纳率: 0%
浏览 264

oracle编写一个分割字符串成数组函数,但是报错很奇怪,请大佬帮忙看看

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;

图片说明

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 03:12
    关注

    根据您提供的信息和错误提示,可以看出这个报错是因为在创建自定义类型 str_split 时,类型定义中使用了 number 类型,但是在函数的返回值类型中使用了此自定义类型。

    根据 Oracle 文档,自定义类型中只能使用简单数据类型、嵌套表类型和其他嵌套记录类型,而不能使用用户定义类型,例如上述的 str_split 类型。因此,您需要使用一个已定义的简单数据类型,如 varchar2 或者 number。

    更改 str_split 类型的定义中的 number 数据类型为一个已定义的简单数据类型,然后再运行函数,即可成功创建函数并正确地将字符串分割成数组。

    评论

报告相同问题?

悬赏问题

  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染