我在 Oracle 中调试触发器时遇到了困难。目前我正在使用 Oracle 的 Sql Developer 工具。
为了测试触发器,我在测试窗口中编写了插入或删除,但我看不到触发器内部发生了什么。我想逐步检查触发器,看看触发器触发时发生了什么。有没有办法使用 select 语句在触发器中显示变量值?
最佳答案
首先,不要“从这里开始”,或者更具体地说,不要使用触发器。如果触发器将为每一行触发,则触发器将强制切换到行级处理。最好将逻辑放在您调用的存储过程中。然后你就有了一个开始(你验证输入的地方)和一个结束和一个逻辑路径。当您遵循一条路径时,存储过程更容易调试。
其次,永远不要测试你不知道如何处理的错误。如果你没有捕获它,它会冒泡给客户端,客户端会收到一个错误报告,说明出了什么问题(错误消息)和位置(即错误/调用堆栈)。如果你试图捕获它,你必须知道如何处理它(如果你不知道倾向于忽略它——这很糟糕)。
最后,您不能轻易看到选择的每个“层”。解释计划通常会告诉你它是如何进行的。 v$session_longops 可以指示它当前正在做什么。当前的等待事件可能会提供有关它当前正在处理的表/ block /行的线索。
关于sql - Oracle 调试技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3731918/