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 字符串中的动态查询。如何打开游标?的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL 中插入 clob 数据时出错

如何克服 CLOB 空间不足 - ORA-06502: PL/SQL: numeric or value error

如何在不修改数据库模式的情况下仅使用 PL/SQL 更新具有大值的 CLOB?

使用 PL SQL 提取基于属性的 XML

如何在调试 PL SQL 脚本时获得 clob 的全部价值

如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -