0

我是 DB Oracle 的新手,当我在 Clarity(即项目和项目组合管理应用程序)中创建新请求或更改请求状态时,我想将该字段更新statusmb_status_idea.

以下查询在更新的情况下运行良好,但如果我创建一个新请求,它不会更新状态。(所以状态不等于状态 MB)。

IF ( :old.mb_status_idea != :new.mb_status_idea) 
THEN  update inv_investments a 
set a.status = stat 
where a.id=:new.id ;
END IF;

我认为问题在于,在创建新请求时,由于插入触发器 OLD 包含 NO VALUE,因此条件为假并且不会更新状态。

注意:该字段status位于表 INV_INVETMENTS 中,(stat := :new.mb_status_idea) 状态 MB 的数据库列是mb_status_idea

我还添加了这个条件 --> 或(:old.mb_status_idea 为空),但是当我再次创建新请求时,“状态”和“状态 MB”的值不同(状态未更新)。

如果有人可以帮助克服这个问题,我将不胜感激。

所有想法都受到高度赞赏,

莫娜

4

1 回答 1

1

使用 Clarity 建议不要使用触发器,原因有两个……作业和流程有时可能会在其他时间更改某些字段的值,而不是在通过应用程序进行编辑时。你无法控制这些。如果您使用 CA 托管服务,则无法使用触发器。升级必须删除触发器,因为升级过程会破坏它们。

对于这种类型的操作,我建议使用流程引擎。您可以设置一个流程以在字段更新时运行。可以通过自定义脚本或系统操作执行更新。系统操作的配置相当简单。如果您使用自定义脚本,管理员书架文档中有示例。您将编写 SQL 更新语句并将其放入 GEL 脚本中。

于 2014-04-08T22:24:35.970 回答