【发布时间】:2014-03-05 12:05:13
【问题描述】:
我的程序
CREATE OR REPLACE PROCEDURE my_procedure(res OUT SYS_REFCURSOR , p_LstKH CLOB)
AS
CURSOR c_dsKH
IS
SELECT TO_NUMBER(REGEXP_SUBSTR(p_LstKH,'[^,]+', 1, level)) value FROM dual
CONNECT BY REGEXP_SUBSTR(p_LstKH, '[^,]+', 1, level) IS NOT NULL;
BEGIN
...
END;
我想拆分长字符串p_LstKH,然后放入CURSOR c_dsKH。示例:p_LstKH = '1,2,....,10000'
c_dsKH.value
1
2
...
10000
但是,当我执行该过程时,我收到错误“没有足够的内存用于通过操作连接”。 我尝试将参数 p_LstKH CLOB 替换为 p_LstKH VARCHAR2,然后出现其他错误“ORA-06502: PL/SQL: numeric or value error: string buffer too small”。
我现在该怎么办?简单地说,我想拆分一个长字符串。 谢谢大家!
【问题讨论】:
-
正则表达式最多可以包含 512 个字节 check here。您可以创建一个全局临时表并编写一个过程来存储结果。并从 GT 表中查询。
-
@simplify_life - pattern 最多可达 512 个字节;这里的模式是
'[^,]+',只有 5 个。这是为大输入字符串生成的级别数。 -
@Alex..Correct.. 我的错
标签: oracle plsql clob connect-by