我在oracle数据库中缺少BEFORE,AFTER或INSTEAD OF关键字错误时遇到了一些问题,但我无法弄清楚我的错误是什么。
我已经在这里和其他网站上检查了几个答案,但无法弄清楚我在触发器声明中做错了什么。
此触发器的目的是记录在数据库的航班表中完成的所有更改(插入更新删除),并将更改的值记录到logging_table
,到目前为止,我已取出所有其他部分,因为它在我到达IF
之前抛出错误方式。
它告诉我错误:ORA-04071:错过BEFORE,AFTER或INSTEAD OF关键字
已编辑的代码在 评论 :
中设置 create table logging_table (
changeType varchar2(20),
changeTime timestamp,
changeUser varchar2(20),
changeStatement varchar2(200));
create table flug2412 as select * from flug;
create or replace trigger change_flights
BEFORE insert /*or update or delete */ on flug2412 for each row
declare
v_type varchar2(20);
v_time timestamp;
v_user varchar2(20); /*v_user varchar2(30) := user;*/
v_statement varchar2(200);
begin
IF INSERTING THEN
v_type := 'I'; /*v_type := 'Insert';*/
v_time := timestamp;
/* Select user into v_user from dual;*/
v_statement := to_char('Insert'|| /*:new.v_type*/
|| ', FlugzeugID: ' || :new.flugzeugid
|| ', GateID: ' || :new.gateid
|| ', Abflughafen: ' || :new.flughafen_abflug
|| ', Destinations Flughafen: ' || :new.flughafen_destination
|| ', Abflugzeit: ' || :new.systimestamp /*:new.abflugzeit*/
|| ', Flugnummer: ' || :new.flugnummer
|| ', Flugdauer: ' || :new.dauer);
insert into logging_table(v_type, v_time, v_user, v_statement);
END IF;
end;
/