我是靠谱客的博主 优美小笼包,最近开发中收集的这篇文章主要介绍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

最后

以上就是优美小笼包为你收集整理的Oracle创建Trigger报错的全部内容,希望文章能够帮你解决Oracle创建Trigger报错所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部