Oracle 起步日记(7)——触发器

 

触发器是被隐含执行的存储过程

 

在为某对象创建触发器时,首先要保证对象不属于SYS用户

因为不可对SYS拥有的对象创建触发器

 

1) 创建BEFORE触发器

 

CREATE OR REPLACE TRIGGER tr_fmodify_student

BEFORE UPDATE ON student

BEGIN

         IF TO_CHAR(SYSDATE,’DY’,'NLS_DATE_LANGUAGE = AMERICAN’) IN (‘FRI’) THEN

         RAISE_APPLICATION_ERROR(-20001,’不能在周五更新表’);

         END IF;

END;

 

其中DY表星期的简写

 

NLS_DATE_LANGUAGE是不同系统之间时间转换

例子中是英文显示,在网上搜了一下还有例如中文和日文的显示,贴一下~

'NLS_DATE_LANGUAGE = Japanese'

 'NLS_DATE_LANGUAGE = ''SIMPLIFIED CHINESE'''——这里有多个单引号 需要注意下~

 

平时用来测试的异常处理我们都是通过dbms_output.put_line来输出异常信息,但是在实际的应用中,需要把异常信息返回给调用的客户端。
RAISE_APPLICATION_ERROR 是将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQLPLUS或者其他前台开发语言)

RAISE_APPLICATION_ERROR 的声明:

PROCEDURE RAISE_APPLICATION_ERROR( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);
里面的错误代码和内容,都是自定义的。说明是自定义,当然就不是系统中已经命名存在的错误类别,是属于一种自定义事务错误类型,才调用此函数。

error_number_in 只容许从 -20000 到 -20999 之间,这样就不会与 ORACLE 的任何错误代码发生冲突。

error_msg_in 的长度不能超过 2k,否则截取 2k。

 

2) 创建AFTER触发器——在执行了DML语句后被触发的触发器

 

CREATE OR REPLACE TRIGGER tr_insert

         AFTER INSERT ON student

BEGIN

         DBMS_OUTPUT.PUT_LINE(‘数据已插入’);

END;

 

3) 创建行触发器——在执行DML语句时,每作用一行被触发一次的触发器

 

CREATE OR REPLACE TRIGGER tr_id

              AFTER INSERT ON student

       BEGIN

              IF :NEW.id<= 3 THEN

                     DBMS_OUTPUT.PUT_LINE(‘ID < 3’);

              END IF;

       END;

 

4) 删除触发器

DROP TRIGGER tr_fmodify_student;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值