【问题标题】:After Insert Trigger to modify one column and update newly inserted row values in Oracle在插入触发器之后修改一列并更新 Oracle 中新插入的行值
【发布时间】:2015-12-21 17:31:20
【问题描述】:
/* Formatted on 24/09/2015 09:36:39 (QP5 v5.215.12089.38647) */
CREATE OR REPLACE TRIGGER TR_student_PREF_sub_UPDATE
   AFTER INSERT OR UPDATE
   ON student
   REFERENCING NEW AS NEW OLD AS OLD
   FOR EACH ROW
DECLARE
   v_preferred_sub_value   NUMBER (1);
   no_project_record       EXCEPTION;
BEGIN
   IF UPDATING OR INSERTING
   THEN
      IF (:NEW.is_sub = 0 AND :NEW.standard_id IS NOT NULL)
      THEN
         SELECT preferred_sub
           INTO v_preferred_sub_value
           FROM STANDARD
          WHERE standard_id = :NEW.standard_id;
      ELSIF (:NEW.is_sub = 1 AND :NEW.subject_id IS NOT NULL)
      THEN
         SELECT preferred_sub
           INTO v_preferred_sub_value
           FROM admin_subject.source
          WHERE source_id = :NEW.subject_id;
      END IF; /* v_preferred_sub_value IS NOT NULL THEN UPDATE preferred_sub VALUE IN student TABLE */

      IF (v_preferred_sub_value IS NOT NULL)
      THEN
         UPDATE student
            SET preferred_sub = v_preferred_sub_value
          WHERE student_id = :NEW.student_id;

         COMMIT;
      END IF;
   END IF;
EXCEPTION
   WHEN NO_PROJECT_RECORD
   THEN
      NULL;
END TR_student_PREF_sub_UPDATE;

Process :当用户从 UI 中单击保存操作时,这会调用 java 代码中的 insert 方法。在将值插入主题表时,调用触发器并检查 is_sub 值是否为 0,然后从标准表中获取 Preferred_sub 值。如果 is_sub = 1 则从 admin_subject.source 模式表中获取 preferred_sub。

基于 v_preferred_sub_value 它正在尝试更新新插入行的主题表。 我从 UI 运行插入操作,在调用触发器后,我检查了带有 preferred_sub 列的主题表,它显示空值。

请帮帮我,我在那边犯了什么错误。

学生表有 student_id、subject_id、standard_id 和 is_sub 值等等。 标准表和学生表在相同的模式中。 source 是授予所有特权的不同模式。

【问题讨论】:

  • 我只对代码进行了格式化,并在代码最后一行的 END 后面更正了触发器的名称。

标签: oracle triggers


【解决方案1】:

将您的触发器更改为前触发器并将确定的值分配给适当的 :new 伪列。数据库将负责其余的工作。

IF (v_preferred_sub_value IS NOT NULL)
THEN
     :NEW.preferred_sub = v_preferred_sub_value;
END IF;

:NEW.preferred_sub 的值现在将被放置在表记录中。

【讨论】:

  • 通过插入命令插入值时插入学生表然后值。触发器没有触发...你能告诉我我在哪里做错了吗?
  • 非常感谢并修改了价值,现在它正在工作。
猜你喜欢
  • 1970-01-01
  • 2017-06-26
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 2013-07-01
  • 2016-10-13
  • 1970-01-01
相关资源
最近更新 更多