

各种预定义例外说明,视图的用处,及创建和删除它的方法
例外的分类
预定义的例外,非预定义的例外
--例外案例
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 视图名