gpt4 book ai didi

oracle 在特定字段更新后触发,然后插入

转载 作者:行者123 更新时间:2023-12-04 17:48:52 24 4
gpt4 key购买 nike

我正在创建一个触发器,它将根据更新后和更新中引用的某些文本将记录插入到另一个表中。

CREATE OR REPLACE TRIGGER NCATSPROD_PM.DEACTIVATE_USERS 
AFTER UPDATE OF "CHANGEBY_CHAR" ON NCATSPROD_PM.PM_USER_DATA
REFERENCING NEW AS "BICSUPP"
BEGIN
INSERT INTO NCATSPROD_PM.DEACTIVATED_USERS (USERNAME, EMAIL, DEACTIVATED_DATE)
VALUES (SELECT USER_ID, EMAIL, CHANGE_DATE FROM ncatsprod_pm.pm_user_data);
END;

当我尝试编译这个时,我收到一个错误
Error(1,3): PL/SQL: SQL Statement ignored
Error(1,90): PL/SQL: ORA-00936: missing expression

有点不确定我哪里出错了? Go to source on the error 将我带到 AFTER UPDATE 行,但查看示例我没有看到发生了什么。我尝试使用 SQL Developer 的触发器向导,结果相同

最佳答案

REFERENCING 子句仅用于更改内置 OLD 和 NEW 记录的名称。 OLD 包含更新前的行的值,NEW 包含更新后的值。下面是一个如何使用它们的示例。

create table PM_USER_DATA (user_id varchar2(20), email varchar2(20), change_date date, changeby_char varchar2(20));
create table DEACTIVATED_USERS (username varchar2(20), email varchar2(20), deactivated_date date);

insert into pm_user_data values ('test', 'test@test.com', sysdate, 'SOMEUSER');

create or replace trigger deactivate_users
after update of changeby_char on pm_user_data
referencing old as o1 new as n1
for each row
begin
if :n1.changeby_char = 'BICSUPP' then
insert into deactivated_users (username, email, deactivated_date)
values (:n1.user_id, :n1.email, :n1.change_date);
end if;
end;
/

update pm_user_data set changeby_char = 'BICSUPP';

select * from deactivated_users;
/* output:
USERNAME EMAIL DEACTIVATED_DATE
-------------------- -------------------- ----------------
test test@test.com 10-OCT-17
1 row selected.
*/

关于oracle 在特定字段更新后触发,然后插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46671459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com