触发器实现插入数据前检查con_sex

yuehang50 2012-12-26 11:11:59

create or replace trigger con_sex_trigger
before insert on consumer for each row
declare
ex_con_sex exception;
begin
if :new.con_sex not in ('m','f') then
raise ex_con_sex;
end if;
exception
when ex_con_sex then
dbms_output.put_line('con_sex只能是m或者f');
end;

没提示错误,但是没效果。。。 我是新手,求指导
...全文
949 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
forgetsam 2012-12-29
  • 打赏
  • 举报
回复
引用 10 楼 yuehang50 的回复:
引用 9 楼 forgetsam 的回复: 那是自定义异常,错误号从-20000~-20999一共1000个,自己随意设定。 那是不是raise了自定义异常,就能自动阻止数据插入?
你之前的那段代码也没错,但是你不要处理,就是说你最后一层异常不要再写exception处理了。
yuehang50 2012-12-29
  • 打赏
  • 举报
回复
引用 9 楼 forgetsam 的回复:
那是自定义异常,错误号从-20000~-20999一共1000个,自己随意设定。
那是不是raise了自定义异常,就能自动阻止数据插入?
forgetsam 2012-12-29
  • 打赏
  • 举报
回复
那是自定义异常,错误号从-20000~-20999一共1000个,自己随意设定。
yuehang50 2012-12-29
  • 打赏
  • 举报
回复
引用 11 楼 forgetsam 的回复:
引用 10 楼 yuehang50 的回复: 引用 9 楼 forgetsam 的回复: 那是自定义异常,错误号从-20000~-20999一共1000个,自己随意设定。 那是不是raise了自定义异常,就能自动阻止数据插入? 你之前的那段代码也没错,但是你不要处理,就是说你最后一层异常不要再写exception处理了。
就是说不写这个,自动就会阻止数据插入了? exception when ex_con_sex then dbms_output.put_line('con_sex只能是m或者f');
forgetsam 2012-12-28
  • 打赏
  • 举报
回复
引用 3 楼 yuehang50 的回复:
引用 2 楼 forgetsam 的回复: 你要什么效果?你的效果就是打行字而已。 不是啊,是在插入表consumer前,检测con_sex这个字段的数据是不是'm'或者'f',不是的话,就raise一个异常
raise了之后你捕获了,处理了,不就是打行字吗,那他就给你打行字不是很正确吗。
yuehang50 2012-12-28
  • 打赏
  • 举报
回复
引用 7 楼 foolish_cc1986 的回复:
楼主是这个意思把 SQL code?12345678create or replace trigger con_sex_triggerbefore insert on consumer for each rowdeclarebegin if :new.con_sex not in ('m','f') then raise_application_erro……
能不能改其他错误? 前面那个20002有什么讲究么?
foolish_cc1986 2012-12-28
  • 打赏
  • 举报
回复
楼主是这个意思把


create or replace trigger con_sex_trigger
before insert on consumer for each row
declare
begin
   if :new.con_sex not in ('m','f') then
   	raise_application_error(-20002,  'con_sex只能是m或者f!!');--异常抛出
   end if;
end;

yuehang50 2012-12-28
  • 打赏
  • 举报
回复
引用 5 楼 forgetsam 的回复:
引用 3 楼 yuehang50 的回复:引用 2 楼 forgetsam 的回复: 你要什么效果?你的效果就是打行字而已。 不是啊,是在插入表consumer前,检测con_sex这个字段的数据是不是'm'或者'f',不是的话,就raise一个异常 raise了之后你捕获了,处理了,不就是打行字吗,那他就给你打行字不是很正确吗。
那怎么阻止它插入?
forgetsam 2012-12-27
  • 打赏
  • 举报
回复
你要什么效果?你的效果就是打行字而已。
jdsnhan 2012-12-27
  • 打赏
  • 举报
回复
set serveroutput on 这样,才有显示的打印信息
yuehang50 2012-12-27
  • 打赏
  • 举报
回复
引用 1 楼 jdsnhan 的回复:
set serveroutput on 这样,才有显示的打印信息
不是这个问题,这个我还是懂的
yuehang50 2012-12-27
  • 打赏
  • 举报
回复
引用 2 楼 forgetsam 的回复:
你要什么效果?你的效果就是打行字而已。
不是啊,是在插入表consumer前,检测con_sex这个字段的数据是不是'm'或者'f',不是的话,就raise一个异常
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧