如何在 sqlplus 中调试 Oracle 动态 sql?

Posted

技术标签:

【中文标题】如何在 sqlplus 中调试 Oracle 动态 sql?【英文标题】:How do I debug Oracle dynamic sql in sqlplus? 【发布时间】:2009-11-05 16:53:52 【问题描述】:

我有一个使用EXECUTE IMMEDIATE 执行查询的PL/SQL 语句。但是,我很难弄清楚如何获取正在执行的查询的文本。我不能使用dbms_output,因为查询大于 255 个字符。有什么办法让sqlplus回显传入EXECUTE IMMEDIATE的字符串?

【问题讨论】:

【参考方案1】:

您使用的是什么版本的 Oracle? 255 是DBMS_OUTPUT.PUT_LINE(). 的默认行长,在 10g 之前,我们可以在单个调用中显示 1048 个字符。从那以后它是32K。

或者,您应该考虑使用支持 DBMS_DEBUG 的 IDE。例如,SQL Developer 就是这样做的,而且它是从 Oracle 中免费获得的。 Find out more.

【讨论】:

嗯...我可能一直在查看过时的信息。我想这意味着没有任何事情在我认为的地方被执行。 :-/【参考方案2】:

您可以尝试将探查器附加到数据库(老实说,我只为 SqlServer 做过)并运行该过程,因为探查器将显示对数据库进行的任何查询,您将能够在那里获取它并执行必要的调试。 希望对你有帮助。。

【讨论】:

【参考方案3】:

如何一次打印 N 个大字符串。 修改以满足您的需求。

FOR i IN 0..10 LOOP
  dbms_output.put_line(substr(my_very_long_string,i*100+1,100));
END LOOP;

【讨论】:

【参考方案4】:

您可以将字符串插入日志/临时表并检查它。

【讨论】:

以上是关于如何在 sqlplus 中调试 Oracle 动态 sql?的主要内容,如果未能解决你的问题,请参考以下文章

Sqlplus的基本使用

sqlplus 登入时弹出 error 57 initializing sqlplus ,要如何

sqlplus如何连接oracle数据库?

进入oracle后,sqlplus如何登陆?

如何使用 cx_Oracle 在 Python 中返回 SQLPLUS 变量

Oracle Dataguard HA (主备,灾备)方案部署调试