用户名:  密码:   
您当前的位置:首页 > SQL数据库 >  Oracle > 

第30讲 各种预定义例外说明,视图的用处,及创建和删除它的方法

上次修改时间: 2015-12-14 10:34:25      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\SQL数据库相关\Oracle数据库学习\韩顺平.玩转oracle教程笔记1_30讲\      下一页

各种预定义例外说明,视图的用处,及创建和删除它的方法

例外的分类
预定义的例外,非预定义的例外
--例外案例
declare--定义关键字
v_ename emp.ename%type;
begin
select ename into v_ename from emp where empno=&gno;
dbms_output.put_line('名字:'||v_ename);
exception
  when no_data_found then
  dbms_output.put_line('编号没有');
end;
有二十多个预定义例外
case_not_found
代码见视频教程

8种预定义例外
cursor_already_open 打开游标后再打开就会出这个异常
invaild_cursor 在不合法游标上执行操作,比如从没打开游标取数据,关闭没有打开的游标等
invaild_number 当输入的数据有误时,如在数字和字符相加
too_many_rows 返回的记录多行到一行
zere_divide 当持行2/0时,刚会触发异常,分母不能为0
value_error变量长度不足以容纳实际数据,会触发该异常
以上的代码请见视频部分

密码错误的例外

自定义例外
create or replace procedure ex_test(spNo number)
is
myex exception;--自定义一个例外
begin
update emp set sal=sal+1000 where empno=spNo;--更新用户sal
if sql%notfound then --sql$notfound 表示如果没有更新成功
rsise myex; --rsise myex;触发myex
end if;
exception
when myex then
dbms_output.put_line('没有更新任何用户');
end;
/
调用过程
exec ex_test(56);

oracle的视图
它是一个虚拟表,内容由查询定义,同真实的表一样,包含一系列带有名称的列和行,在引用视图时动态生成
不在数据库中以数据集存在
1.如果要显示各个雇员的名字和他所在部门名称,必须用到emp和dept两个表
2.假设管理员创建一个用户:xiaohong,现在就希望xiaohong只可以查询sal<1000那些雇员
从不同的表取出一些数据列组合成一个新表,源表数据改变时视图的数据也改变了
2的解决方法:查出要的数据到视图就可以了,然后反把视图授权给用户可以了

 --创建视图,把emp表的sal<1000的雇员映射到该视图(view)
create view myview as select * from emp where sal<1000;
select * from myview; --查询视图的内容
--为简化操作,用一个视图解决 显示雇员编号,姓名和部门名称
create view myview2 as select emp.empno,emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;
该语句创建的视图里只有empno,ename,dname三个字段,而不是叫emp.empno,emp.ename,dept.dname的三个字段
select * from myview2;

视图的其它调用:
视图和视图之间可以联合查询

把视图设为只读
在创建视图的语句最后加with read only
create view myview as select * from emp where sal<1000 with read only;

删除一个视图
drop view 视图名