问题描述
嗨,汤姆,
在你的网站上,我没有找到任何关于这个话题的东西可以帮助我,所以我决定写。
我们检测到程序执行中不会发生的情况。输出参数与值一起返回,当它不应该
当经过几次测试后,我们得出结论,程序包的编译方式影响了函数在输出参数中执行的行为时,情况变得更加奇怪。
也就是说,如果软件包是在调试模式下编译的,则结果符合预期。如果软件包未在debug中编译,则不会发生相同的情况。
场景: 当执行导致错误的函数时,预计不会填充输出参数 (除非代码写得不好)。但是很好的例子是代码没有指向正在填充的输出参数。
此外,如果我们操纵数据库中定义的优化级别,则输出参数上的行为也会受到影响。优化级别0和1 (对应于调试),一切正常。2级总是效果不佳,而3级则取决于代码的复杂性,有时效果很好,有时效果很差。
创建了简单的示例来突出显示检测到的异常。
附加的脚本创建两个函数和 “FCOUTPUT_TEST_LEVEL_1” 的调用/执行
应该注意的是,这种情况是在oracle 12c和oracle 19c (PDB) 中检测和测试的
事先,我感谢您能提供的帮助。
在你的网站上,我没有找到任何关于这个话题的东西可以帮助我,所以我决定写。
我们检测到程序执行中不会发生的情况。输出参数与值一起返回,当它不应该
当经过几次测试后,我们得出结论,程序包的编译方式影响了函数在输出参数中执行的行为时,情况变得更加奇怪。
也就是说,如果软件包是在调试模式下编译的,则结果符合预期。如果软件包未在debug中编译,则不会发生相同的情况。
场景: 当执行导致错误的函数时,预计不会填充输出参数 (除非代码写得不好)。但是很好的例子是代码没有指向正在填充的输出参数。
此外,如果我们操纵数据库中定义的优化级别,则输出参数上的行为也会受到影响。优化级别0和1 (对应于调试),一切正常。2级总是效果不佳,而3级则取决于代码的复杂性,有时效果很好,有时效果很差。
创建了简单的示例来突出显示检测到的异常。
附加的脚本创建两个函数和 “FCOUTPUT_TEST_LEVEL_1” 的调用/执行
应该注意的是,这种情况是在oracle 12c和oracle 19c (PDB) 中检测和测试的
事先,我感谢您能提供的帮助。
专家解答
这在文档中涵盖,尽管有一个通用的总体语句:
https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/plsql-subprograms.html#GUID-18E72176-145F-4E12-95F1-03F84B3D5DC6
"If the subprogram ends with an exception, then the value of the actual parameter is undefined."
如果例程以错误结尾,则您无法假设有关返回的参数值的 * 任何 *。
这与优化级别有关,因为我们可能会重新排列您的代码以提高其性能。因此,分配给out绑定变量的时间和发生时间可能已经转移了。
但最重要的是-如果该函数遇到错误,则不能 “使用” OUT参数的值。它的价值可以是任何东西。
https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/plsql-subprograms.html#GUID-18E72176-145F-4E12-95F1-03F84B3D5DC6
"If the subprogram ends with an exception, then the value of the actual parameter is undefined."
如果例程以错误结尾,则您无法假设有关返回的参数值的 * 任何 *。
这与优化级别有关,因为我们可能会重新排列您的代码以提高其性能。因此,分配给out绑定变量的时间和发生时间可能已经转移了。
但最重要的是-如果该函数遇到错误,则不能 “使用” OUT参数的值。它的价值可以是任何东西。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
790次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
665次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
594次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
549次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
535次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
510次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
500次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
472次阅读
2025-04-17 09:30:30
OR+DBLINK的关联SQL优化思路
布衣
383次阅读
2025-05-05 19:28:36
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
383次阅读
2025-04-15 14:48:05