oracle中pl/sql编程(六):
oracle中的例外处理:
例外的分类:
a)预定义例外:用于处理常见的oralce错误(系统自带的例外)
b)非预定义例外:用于处理预定义例外不能处理的例外
c)自定义例外:用于处理与oracle错误无关的其他情况
--例外案例(预定义例外案例)
declare
--定义
v_ename emp.ename%type;
begin
select ename into v_ename from emp where empno=&aa;
dbms_output.put_line('用户名为:'||v_ename);
exception
when no_data_found then
dbms_output.put_line('你输入的编号不存在,请重新输入!');
end;
在这里着重讲一些预定义例外的种类(只讲常用的几个):
a) case_not_found:如果在when子句中没有包含必须的条件分支,就会触发case_not_found
b) cursor_already_open:当重新打开已经打开的游标时,会隐含的触发例外cursor_already_open
c) dup_val_on_index:在唯一索引所对应的列上插入重复的值时,会隐含的触发例外dup_val_on_index例外
d)invaild_cursor:当视图在不合法的游标上执行操作时:会触发该例外
例如:试图从没有打开的游标提取数据,或是关闭没有打开的游标,则会触发该例外等等
e)invalid_number:当输入的数据有误时,会触发该例外
比如:数字100写成了loo(字符串)就会触发该例外
f)too_many_rows:(举例说明)当执行select into 语句时,如果返回超过了一行,则会触发该例外
g)zero_divide:(举例说明)当执行2/0语句时,则会触发该例外
h)value_error:(举例说明)当在执行赋值操作时,如果变量的长度不足以容纳实际数据,
则会触发该例外value_error
下面提一下其他的预定义例外:
a)login_denide:当用户非法登录时,会触发该例外
b)not_logged_on:如果用户没有登录就执行dml操作,就会触发该例外
c)storage_error:如果超出了内存空间或是内存被损坏,就触发该例外
d)timeout_on_resource:如果oracle在等待资源时,出现了超时就触发该例外
--自定义例外(重点)
create or replace procedure Lw(spNo number)
is
--定义一个例外
mytx exception;
begin
update emp set sal = sal +1000 where empno=spNo;
--sql%notfound 代表sql语句没有找到对应的结果,比如这里的
--update就没有找到(注意这里如果是select的话,那么有预定义例外,不需要自定义)
if sql%notfound then
---raise mytx 代表触发mytx
raise mytx;
end if;
exception
when mytx then
dbms_output.put_line('输入的编号有误,没有任何雇员薪水更新成功!');
end;
oracle中的视图:
什么是视图?
1.视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视图并不在数据库中以存储的数据值形式存在,而是存储在所引用的数据表中,视图的结构和数据是对数据表进行查询的结果。
2.根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合,它存储了要执行检索的查询语句的定义,以便在引用该视图时使用。
视图和表的区别:
1.表需要占用磁盘空间,视图不需要
2.视图不能添加索引,表可以
3.使用视图可以简化复杂的查询 比如:学生选课系统
4.视图有利于提高安全性 比如:不同用户查看不同的视图
创建视图:
create view 视图名 as select 语句(sql) [with read only](加上了后面这段代码就代表视图只可以读,不可以做其他操作)
如:
create view myview as select * from emp where sal<1000;
创建或者修改视图:create view 视图名 as select 语句(sql) [with read only]
删除视图:
drop view 视图名
oracle中的例外处理:
例外的分类:
a)预定义例外:用于处理常见的oralce错误(系统自带的例外)
b)非预定义例外:用于处理预定义例外不能处理的例外
c)自定义例外:用于处理与oracle错误无关的其他情况
--例外案例(预定义例外案例)
declare
--定义
v_ename emp.ename%type;
begin
select ename into v_ename from emp where empno=&aa;
dbms_output.put_line('用户名为:'||v_ename);
exception
when no_data_found then
dbms_output.put_line('你输入的编号不存在,请重新输入!');
end;
在这里着重讲一些预定义例外的种类(只讲常用的几个):
a) case_not_found:如果在when子句中没有包含必须的条件分支,就会触发case_not_found
b) cursor_already_open:当重新打开已经打开的游标时,会隐含的触发例外cursor_already_open
c) dup_val_on_index:在唯一索引所对应的列上插入重复的值时,会隐含的触发例外dup_val_on_index例外
d)invaild_cursor:当视图在不合法的游标上执行操作时:会触发该例外
例如:试图从没有打开的游标提取数据,或是关闭没有打开的游标,则会触发该例外等等
e)invalid_number:当输入的数据有误时,会触发该例外
比如:数字100写成了loo(字符串)就会触发该例外
f)too_many_rows:(举例说明)当执行select into 语句时,如果返回超过了一行,则会触发该例外
g)zero_divide:(举例说明)当执行2/0语句时,则会触发该例外
h)value_error:(举例说明)当在执行赋值操作时,如果变量的长度不足以容纳实际数据,
则会触发该例外value_error
下面提一下其他的预定义例外:
a)login_denide:当用户非法登录时,会触发该例外
b)not_logged_on:如果用户没有登录就执行dml操作,就会触发该例外
c)storage_error:如果超出了内存空间或是内存被损坏,就触发该例外
d)timeout_on_resource:如果oracle在等待资源时,出现了超时就触发该例外
--自定义例外(重点)
create or replace procedure Lw(spNo number)
is
--定义一个例外
mytx exception;
begin
update emp set sal = sal +1000 where empno=spNo;
--sql%notfound 代表sql语句没有找到对应的结果,比如这里的
--update就没有找到(注意这里如果是select的话,那么有预定义例外,不需要自定义)
if sql%notfound then
---raise mytx 代表触发mytx
raise mytx;
end if;
exception
when mytx then
dbms_output.put_line('输入的编号有误,没有任何雇员薪水更新成功!');
end;
oracle中的视图:
什么是视图?
1.视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视图并不在数据库中以存储的数据值形式存在,而是存储在所引用的数据表中,视图的结构和数据是对数据表进行查询的结果。
2.根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合,它存储了要执行检索的查询语句的定义,以便在引用该视图时使用。
视图和表的区别:
1.表需要占用磁盘空间,视图不需要
2.视图不能添加索引,表可以
3.使用视图可以简化复杂的查询 比如:学生选课系统
4.视图有利于提高安全性 比如:不同用户查看不同的视图
创建视图:
create view 视图名 as select 语句(sql) [with read only](加上了后面这段代码就代表视图只可以读,不可以做其他操作)
如:
create view myview as select * from emp where sal<1000;
创建或者修改视图:create view 视图名 as select 语句(sql) [with read only]
删除视图:
drop view 视图名