gpt4 book ai didi

debugging - 查找行删除的 PL/SQL 源

转载 作者:行者123 更新时间:2023-12-01 04:26:52 25 4
gpt4 key购买 nike

我在 10g 数据库中继承了一些令人讨厌的 PL/SQL 代码,该代码不正确地从特定表中删除行。

我知道删除正在发生,因为我设置了一个触发器,用于在删除行时记录行详细信息。

显然,简单的答案是“搜索“删除自”。但是,所涉及的过程之一包含 18 页 PL/SQL,并且该过程有大约 25 个参数。代码中的删除指定要删除哪些行通过一些非常复杂的连接,涉及许多参数。这是非常非常糟糕的代码,需要一些时间来调试。

Oracle 中是否有工具可以帮助我查明导致删除的语句?

完美的是在删除时记录堆栈跟踪的触发器,但我认为这种情况不存在。

有人告诉我,打开跟踪可能会有所帮助,但这也可能是一项相当大的练习,具体取决于跟踪输出的数量。

我还想过也许锁定表并查看在哪里抛出错误,但考虑到代码无疑在删除之前执行了大量插入,我不知道该错误会有任何帮助。

所有想法均表示赞赏。

最佳答案

听起来您正在处理大型 ETL 流程?我可能会开始这样做:

  • 将源数据的(非常)小子集复制到 QA 或开发环境中,包括我知道将被删除的几行,以及我知道不会删除的几行(可能是一天的数据-之前备份)。

  • 使用 PL/SQL 调试器运行代码,并在每个 SQL“删除”语句处设置断点。每次“删除”发生后,检查您的行是否仍然存在。使用像 TOAD 这样的 IDE 可以更容易地做到这一点,但也可以仅使用 Oracle 技术来完成。请参阅http://www.adp-gmbh.ch/ora/plsql/debug.html .

  • 正如您提到的,还有 PL/SQL 跟踪,它对于识别较小代码片段中的此类问题很有用。这些文件变得非常大非常快,因此像以前一样使用一小部分数据进行跟踪可能是明智的。

  • 有关异常堆栈跟踪,请查看此处 - http://paranoid-engineering.blogspot.com/2008/07/oracle-exception-handling-stack-trace.html您也许可以添加一些额外的代码来处理异常,然后“锁定”表以生成“删除”异常

在每个“DELETE”sql 语句之后,您可能必须求助于旧的备用数据库 - DBMS_OUTPUT。

关于debugging - 查找行删除的 PL/SQL 源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5487523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com