sql - Oracle 调试技术

标签 sql oracle debugging oracle-sqldeveloper

我在 Oracle 中调试触发器时遇到了困难。目前我正在使用 Oracle 的 Sql Developer 工具。
为了测试触发器,我在测试窗口中编写了插入或删除,但我看不到触发器内部发生了什么。我想逐步检查触发器,看看触发器触发时发生了什么。有没有办法使用 select 语句在触发器中显示变量值?

最佳答案

首先,不要“从这里开始”,或者更具体地说,不要使用触发器。如果触发器将为每一行触发,则触发器将强制切换到行级处理。最好将逻辑放在您调用的存储过程中。然后你就有了一个开始(你验证输入的地方)和一个结束和一个逻辑路径。当您遵循一条路径时,存储过程更容易调试。
其次,永远不要测试你不知道如何处理的错误。如果你没有捕获它,它会冒泡给客户端,客户端会收到一个错误报告,说明出了什么问题(错误消息)和位置(即错误/调用堆栈)。如果你试图捕获它,你必须知道如何处理它(如果你不知道倾向于忽略它——这很糟糕)。
最后,您不能轻易看到选择的每个“层”。解释计划通常会告诉你它是如何进行的。 v$session_longops 可以指示它当前正在做什么。当前的等待事件可能会提供有关它当前正在处理的表/ block /行的线索。

关于sql - Oracle 调试技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3731918/

相关文章:

sql - varbinary 到 varchar w/o master.dbo.fn_varbintohexstr

mysql - 查找mysql中两列共有的值

linux - 当从 Linux 服务器中的 sqlplus 插入时,Windows-1252 (80-9F) 控制字符在 oracle db 中插入为 �

java - 使用 HQL(Hibernate 查询语言)转换查询 Oracle

c# - 过滤 C# 的调试输出

c++ - 如何让 Qt Creator 的调试器在 OS X 中显示 C++ vector 的内容?

c# - 创建 linq 查询以使用与智能手机相同的方式搜索联系人

mysql - 针对海量数据优化MySQL Full outer join

oracle - PL/SQL <<单词>>的含义是什么

python - Conda 和 Visual Studio Code 调试