Oracle创建Trigger报错

背景

由于数据删除,导致公司的业务遭到了一定的影响,但最终没有人承认,因为是一个公用账号,name,数据被删除,则重要数据需要快速的被找回,于是,一个基础的解决方案出来了,要求【重要表格的数据】执行删除动作之前要进行备份。我们是采用重要表格删除动作设置Trigger,建立备份表,对数据进行备份。

环境

  • 2022-09-05
  • 数据库连接工具DBeaver

遇到的问题

  • 报错 ORA-04098: trigger ‘RMSTEST.NEWMKD_LIST’ is invalid and failed re-validation
    • oracle触发器中04098==》描述了怎么查看不成功的原因。
    • 是由于要建Trigger的表栏位搞混了,也就是栏位不存在
    • 已解决
  • ORA-00933: SQL command not properly ended
  • PLS-00103: Encountered the symbol “end-of-file” when expecting one of the following: ( begin case declare end exception exit for goto if loop mod null pragma raise return select update while with << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge
    • 这个其实我看了蛮多,最后呢是找我同事帮忙看看,因为他用的工具跟我的不一样,一进去就知道是什么问题了(他用的Oracle的官方工具SQL Developer)因为会有个微红的虚线,大概知道是哪里有问题。我的是insert语句结束后,没有添加分号(;)!!!!但是我用的DBeaver根本没有体现,只是编译的时候报错。
      左DBeaver 右SQL Developer

步骤

  • 先创建跟主表结构一模一样的【备份表】多加一个删除时间的栏位(OP_REMARK VARCHAR2(30))
  • 创建Trigger
  • 代码
create or replace TRIGGER 你的trigger的名字
这里可以是BEFORE或者AFTER都可以,一个是操作前,一个是操作后 DELETE ON 原来的表格
FOR EACH ROW
DECLARE
V_MESSAGE VARCHAR(50);
BEGIN

V_MESSAGE := to_char(sysdate,'yyyy/mm/dd HH24:MI:SS') || ' DELETE';

INSERT INTO
  TABLE_BACK (
    "NO",
    ASSISTANT_EMP, 
	,OP_REMARK
  )
VALUES
(   
 	:OLD.NO, 
    :OLD.ASSISTANT_EMP
,V_MESSAGE
);
END;

参考文章

oracle触发器中04098

猜你喜欢

转载自blog.csdn.net/qq_41128526/article/details/126705043
今日推荐