如何在oracle中拆分长度为25000个字符的逗号分隔值?

时间:2017-05-31 09:36:46

标签: c# oracle stored-procedures

我正在尝试将逗号分隔值(实际上是以逗号分隔的列表框中的选定列表项的值)从C#.NET传递到oracle存储过程。存储过程参数是CLOB。在查询的WHERE条件中,正在使用此CLOB值(存储在VARCHAR2(30000)变量中),因为CLOB参数不能直接在WHERE条件中使用。以下查询用于将逗号分隔值拆分为单独的记录。

SELECT COL_NAME FROM TBL WHERE
CUSTOMER_ID IN (select REGEXP_SUBSTR(V_SELECTED_CUSTOMER,'[^,]+', 1, LEVEL) FROM DUAL
CONNECT BY REGEXP_SUBSTR(V_SELECTED_CUSTOMER, '[^,]+', 1, LEVEL) is NOT NULL);

现在我面临的问题是,当用户选择所有ListBox值时,输入参数的长度约为23,000。在这种情况下,存储过程抛出以下错误:

  

ORA-01460:请求未执行或无理转换

问题可能是由于REGEXP_SUBSTR功能,通常需要STRING最多4000个字符。 V_SELECTED_CUSTOMER变量是VARCHAR2(30000)。  有没有办法让这个工作也适用于CLOB值。 或者还有其他替代方案可以实现吗?

0 个答案:

没有答案