如何在 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 登入时弹出 error 57 initializing sqlplus ,要如何