例外的种类

---------------------------------------------------------------------------------------------

--例外(20多个)的案例

---------------------------------------------------------------------------------------------

-no_data_found(没有返回的行会触发该例外)




declare
v_ename emp.ename%type;
begin
select ename into v_ename from emp where empno=&no;
dbms_output.put_line('名字:'||v_ename);
exception
  when no_data_found then
  dbms_output.put_line('编号不存在');
end;
-----------------------------------------------------------------------------------------
--case_not_found例外


--在pl/sql中使用case语句时候,我很子句没有包含必须的条件分支,就会触发case_not_found例外
create or replace procedure sp_pro13(spno number) is
  v_sal emp.sal%type;
begin
  select sal into v_sal from emp where empno=spno;
  case
  when v_sal<1000 then
  update emp set sal=sal+100 where empno=spno;
  when v_sal<2000 then
  update emp set sal=sal+200 where empno=spno;
  end case;
exception
  when case_not_found then
  dbms_output.put_line('case语句没有找到与'||v_sal||'相关的条件');

end;

--------------------------------------------------------------------------------------------------

cursor_already_open(打开已经打开的游标会触发此例外)


--------------------------------------------------------------------------------------------------

dup_val_on_index(插入重复的值)


---------------------------------------------------------------------------------------------------------------

invalid_cursor(在不合法的游标上执行操作,触发该例外)


---------------------------------------------------------------------------------------------------------------------

invalid_number(当输入的数据有误时候,触发该例外)


declare
begin
update emp set sal=sal+'1oo';
exception
  when invalid_number then
  dbms_output.put_line('输入的数字不正确!');
end;

-----------------------------------------------------------------------------------------------------------------

too_many_rows(select into 语句中返回超过了一行,触发该例外)


-------------------------------------------------------------------------------------------------------------------------------

--zero_divide(当执行运算操作例如:2/0,触发该例外)

-------------------------------------------------------------------------------------------------------------------------------

value_error(赋值操作时,变量长度不足以容纳实际数据,触发该例外)


------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------


==========================================================================================

处理自定义例外

==========================================================================================


案例:

--处理自定义例外
create or replace procedure ex_test(spNo number) is
--定义一个例外
myex exception;
begin
  update emp set sal=sal+1000 where empno=spNo;--默认update不会报异常,但是select会报异常
  --sql%notfound表示没有update或者失败
  --raise myex表示触发myex例外
  if sql%notfound then
  raise myex;
  end if;
exception 
  when myex then
  dbms_output.put_line('没有更新任何用户!');
end;

----------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------

--视图的操作
--创建视图,将emp表的sal<1000的雇员映射到该视图(view)
create or replace view myview1
as
select * from emp where sal<1000;


select * from myview1;
--利用视图显示雇员编号,姓名,和部门名称
create or replace view myview2
as
select a1.empno,a1.ename,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno;


select * from myview2;


--删除视图
drop view myview;


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值