PL/SQL:clob 字符串中的动态查询。如何打开游标?
Posted
技术标签:
【中文标题】PL/SQL:clob 字符串中的动态查询。如何打开游标?【英文标题】:PL/SQL: dynamic query in clob string. How can i open a cursor? 【发布时间】:2018-11-22 16:07:10 【问题描述】:我使用的是 Oracle 10g,但我在使用 Open for Query_string 时遇到问题。
该查询字符串是一个动态查询,它有 7000 多个字符。
如何使用 varchar2 打开游标(在 10g 中只接受 4000 的最大长度)?目前我尝试使用 CLOB 而不是 open..for 不接受它。
在标头中声明:TYPE tref IS REF CURSOR;
DECLARE
SQL CLOB;
BEGIN
SQL := '...';
OPEN tref FOR SQL
END
不接受的10g版本是:
DECLARE
SQL VARCHAR2(8000);
BEGIN
SQL := '...';
OPEN tref FOR SQL
END
谢谢
【问题讨论】:
即使在 Oracle 10 中,PL/SQL 变量也最多可容纳 32767 个字节:Quote from the manual"VARCHAR2 数据类型采用一个必需参数,该参数指定最大大小为 32767 个字节 i>" 无论如何从 .net 调用到存储过程都会告诉我最大长度的错误。明明用12g没问题。 【参考方案1】:大家好
我得到了解决方案,当你有 CLOB 时,你可以使用 dbms_lob.substr...
OPEN p_ref FOR dbms_lob.substr( SQL, 32000, 1 );
【讨论】:
Oracle 10g 和 Oracle 12g 的这个选项效果很好以上是关于PL/SQL:clob 字符串中的动态查询。如何打开游标?的主要内容,如果未能解决你的问题,请参考以下文章
如何克服 CLOB 空间不足 - ORA-06502: PL/SQL: numeric or value error