oracle数据库触发器无效且未通过重新确认

第一次写触发器,要求更新a表的objstate字段时,更新b表的state字段,两个表通过objcode字段关联,触发器如下:
create trigger a_update
on a
after update
as
begin
if update(objstate)
begin
update b set state = inserted.objstate where objcode = insered.objcode
end
end

创建成功后,更新a表的objstate字段,报错触发器无效且未通过重新确认
求正解~~
上边那个,我贴错了,应该是:
create trigger a_update
after update on a
begin
if update(objstate)
begin
update b set state = inserted.objstate where objcode = insered.objcode
end
end
最新回答
晨曦慕雪

2025-02-25 02:27:53

目测,  你是在用 SQL Server 数据库的语法,  在 Oracle 上面写触发器啊......


CREATE TABLE a (
  objcode  INT,
  objstate INT
);


CREATE TABLE b (
  objcode  INT,
  objstate INT
);

INSERT INTO a VALUES( 1, 100);
INSERT INTO b VALUES( 1, 100);


CREATE OR REPLACE TRIGGER tr_a_Update
  BEFORE UPDATE OF objstate ON a
FOR EACH ROW
BEGIN
  UPDATE b 
  SET objstate = :NEW.objstate
  WHERE objcode = :OLD.objcode;
END;
/

触发器已创建

SQL> 
SQL> UPDATE a SET objstate = 200 WHERE objcode = 1;

已更新 1 行。

SQL> 
SQL> SELECT * FROM a;

   OBJCODE   OBJSTATE
---------- ----------
         1        200

SQL> 
SQL> SELECT * FROM b;

   OBJCODE   OBJSTATE
---------- ----------
         1        200
考考死

2025-02-25 01:04:11

实践证明你这个代码是完全正确的,我都执行完了。而且添加了一条数据没有存在问题,序号也自动加进去了。是不是你执行创建的时候把其他代码页选上运行啦!
一念花开

2025-02-25 03:54:50

if update(objstate) then
begin
update b set state = inserted.objstate where objcode = insered.objcode;
end;
end if ;
追问
这么改了,还是不行啊,错误依旧
狙击甜心

2025-02-25 01:56:25

after update这后面要跟对应的表名称,要不然它怎么知道你是update谁?
追问
create trigger a_update 
after update on a
begin
if update(objstate)
begin
update b set state = inserted.objstate where objcode = insered.objcode
end
end
报错:触发器无效且未通过重新确认