PL/SQL 触发器不会运行

Posted

技术标签:

【中文标题】PL/SQL 触发器不会运行【英文标题】:PL/SQL triggers won't run 【发布时间】:2018-10-21 14:44:55 【问题描述】:

我有一个在 Weblogic 服务器上运行的 Oracle Forms 11 g 应用程序。默认的表单/登录页面有一些根本不会触发的 PL/SQL 触发器。其余的配置似乎成功了。

谁能告诉我从哪里开始寻找?提前致谢。

【问题讨论】:

告诉我们哪些触发器没有触发。 【参考方案1】:

顾名思义,triggers 在有东西触发它们时触发。例如,

按下按钮即可触发WHEN-BUTTON-PRESSED 触发器 在数据块中执行查询后触发POST-QUERY 触发器 WHEN-NEW-FORM-INSTANCE 触发器在表单运行时触发

等等。

因此,请确保触发器确实被触发。你拥有它们并不意味着它们会运行,只是因为

为了找出答案,您有两种选择:

在调试模式下运行表单: 在其中一个触发器中(例如在WHEN-NEW-FORM-INSTANCE 中)通过右键单击其左边距来设置断点(您将看到下一步该做什么) 然后运行表单;不应该使用你用来运行它的绿色工具栏图标,而是使用它旁边的那个,上面有 reddish 的东西 一旦执行到断点,它将停止,您将被转移到 Forms Builder,调试控制台将打开,让您逐步浏览其余代码 这样做,您就会知道发生了什么,即这些触发器是否被调用以及它们的作用 正如你所怀疑的那样:你是否有任何机会放置一些使用WHEN OTHERS THEN NULL 或类似东西的异常处理程序?如果是这样,请摆脱它们。即使引发了异常(例如 NO_DATA_FOUNDTOO_MANY_ROWS,仅提及两个最流行和频繁的异常),THEN NULL 也会默默地掩盖它

另一种是将MESSAGE调用放入触发器中,如

begin
  message('running WBP trigger: step 1');
  ... the rest of your code goes here
end;

这样做,message-after-message 将在屏幕上发出“警报”(因为您必须单击 OK 才能看到它所说的内容),并且您会很快看到哪些触发器被触发,哪些没有被触发.然后进一步调查 - 前面描述的调试会有所帮助。

如果这些都没有帮助,您将不得不描述发生了什么,但这次提供更多信息。你写的不是很详细。无论如何,祝你好运。

【讨论】:

非常感谢小脚的详细回复。我可以提供所需的详细信息。它不执行任何 pl sql,甚至不执行简单的警报。我可能应该添加此应用程序在 Windows 上工作的背景,但我正在 centos 7 服务器上对其进行测试。让我知道您想知道的其他详细信息,环境文件 formsweb.cfg 等,任何建议都非常感谢 不客气。我想我不需要任何进一步的细节。此外,我是一个 Windows 人,对 Centos 一无所知。你可以做的是重新编译表单(Ctrl + Shift + K),创建一个 FMX 文件,把它放到服务器上看看会发生什么。顺便说一句,您是否在调试模式下运行它?你发现了什么?

以上是关于PL/SQL 触发器不会运行的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 触发器 - 触发问题 3

触发存储过程运行而不是 INSERT (PL/SQL)

PL/SQL 触发器未检测到

PL/SQL:检查触发器中的所有行后运行包

使用 PL\SQL Developer 7.0.2 调试 Oracle 触发器?

在 pl/sql 中手动排序触发器触发