Oracle APEX - 数据库触发器中的 If 语句

Posted

技术标签:

【中文标题】Oracle APEX - 数据库触发器中的 If 语句【英文标题】:Oracle APEX - If statement in database trigger 【发布时间】:2011-12-19 14:20:01 【问题描述】:

好的。所以我知道如何创建一个触发器,当对表 A 执行操作时,对表 B 进行更改。这相对容易,我很乐意这样做。我一直无法做的是创建一个包含 if 语句的触发器,以便在满足某些条件时执行。

例子:

表 A 和表 B 是相关的。表 A 包含有关当前正在处理的文档的数据,这些文档由唯一的处理代码标识。表 B 包含有关由出版物 ID 标识的定稿和已发布文档的数据。表 A 和表 B 是相关的,因为一个文档可能会经历多次修订,因此它可能会在表 A 中出现多次(唯一的处理代码但相同的出版物 ID),而仍然只出现在表 B 中一次。无论经过多少次修订,出版物 ID 在文档的整个生命周期中都保持不变。

表 A 是通过一个输入表单填写的,人们在该表单中提交有关他们希望我们处理的文件的请求。他们可以选择处理新文档,或者如果他们想要修改表 B 中已经存在的当前文档。这是通过无线电组(新建、修订等)完成的。如果选择了“修订”,则会出现一个选择列表框,其中填充有表 B 中的出版物 ID,用户可以选择要编辑的文档。

我需要做的是创建一个触发器或其他方式,当通过我们的输入表单提交请求时,检查它是否是针对表 B 中文档的修订并标记 '将表 B 中的“状态”列更改为“正在修订”。

因此,它需要有条件地调用或在触发器本身中有某种 if 语句。同样,条件是如果在表 A 的输入表单上选择了“修订”,则将所选出版物 ID 的状态设置为“修订中”。

谢谢!

【问题讨论】:

【参考方案1】:

应该是A表正常的行级触发,

伪代码应该是这样的..

在表 A 上为每一行创建或替换触发器..... 如果 :NEW.process_selected = 'Revision' 那么 更新 b set status = '修订中' 其中publication_id = :publication_id; 万一; 结束;

-桑吉夫

【讨论】:

【参考方案2】:

很久没用APEX了,但是表单提交不能直接到pl/sql过程而不是直接到表吗?然后编写一个根据输入参数采取适当动作的过程。

【讨论】:

我必须将表单提交到表格。我只想让提交操作触发一个触发器,该触发器将有条件地更改另一个表中的值。

以上是关于Oracle APEX - 数据库触发器中的 If 语句的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Apex:如何计算主从表单上的详细记录

Oracle Apex 中财政年度的 SQL 触发器

触发器共同在oracle apex应用程序中工作

Oracle APEX 中的条件值列表?

如何在动态操作中单击按钮时调用Oracle APEX中的javascript函数?

APEX初步 [3] —— Apex触发器