触发器实现插入数据前检查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;

没提示错误,但是没效果。。。 我是新手,求指导
...全文
892 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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一个异常

17,140

社区成员

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

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