oracle 在字段上触发以捕获值和更新时间

0sgqnhkj  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(142)

我想在一个字段上添加一个触发器,比如来自表ABC的F,并将其值插入表DEF new_field属性中,同时使用Oracle中的SYSDATE函数捕获字段DEF.date中的更新时间
下面是我新创建的表,我想在其中插入值

CREATE TABLE Updated_log (
  MPN_ID     NUMBER,
  Is_Updated_value   VARCHAR2(200),
  MODIFYDATE DATE
 );

字符串
我在page_two的特定属性LIST24上写入FOR update时遇到问题

CREATE OR REPLACE TRIGGER AGILE.Check_Update
    BEFORE UPDATE ON AGILE.PAGE_TWO
    FOR EACH ROW
BEGIN
   INSERT INTO Updated_log (MPN_ID, Is_Updated_value, MODIFYDATE)
   VALUES( NEW.id, NEW.LIST24, SYSDATE);
END;

ycggw6v2

ycggw6v21#

伪记录(newold)在触发器主体中引用时,必须在前面加上冒号符号(:)。
测试用例:

SQL> create table page_two (id number, list24 number);

Table created.

SQL> create table updated_log (mpn_id number, is_updated_value varchar2(20), modifydate date);

Table created.

字符串
触发器;参见第4行(when子句中的伪记录没有(实际上,必须没有)冒号)和第8行(在触发器主体中,必须有冒号):

SQL> create or replace trigger check_update
  2    before update on page_two
  3    for each row
  4    when (new.list24 is not null)          --> here
  5  begin
  6    insert into updated_log
  7      (mpn_id, is_updated_value, modifydate)
  8      values
  9      (:new.id, :new.list24, sysdate);     --> here
 10  end;
 11  /

Trigger created.


测试:

SQL> insert into page_two (id, list24) values (1, 100);

1 row created.

SQL> select * from updated_log;

no rows selected

SQL> update page_two set list24 = 200 where id = 1;

1 row updated.

SQL> select * From page_two;

        ID     LIST24
---------- ----------
         1        200

SQL> select * from updated_log;

    MPN_ID IS_UPDATED_VALUE     MODIFYDAT
---------- -------------------- ---------
         1 200                  19-JUL-23

SQL>

相关问题