按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
。。。。。。。。。。。;
when others then
statement1;
statement2;
。。。。。。。。。。。;
9。非预定义异常:
有编号,没名称。需要先定义名称再扑捉;
(1)在 DECLARE 部分定义一个异常的名称; exc_name EXCEPTION;
(2)把名称和异常编号连接起来; PARGMA EXCEPTION_INIT(exc_name;…exc_number);
3、函数:
SQLCODE :返回错误编号
SQLERRM :返回错误信息
写入错误日志的内容: 用户,时间,对象,操作,错误编号,错误信息。
用户定义异常:
(1)命名;
(2)raise关键字在 BEGIN 后触发;
第 88 页,共 106 页
…………………………………………………………Page 89……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
(3)捕捉;
语法:
exception
when exception1 or exception2 then
statement1;
statement2;
。。。。。。。。;
when exception3 or exception4 then
statement1;
statement2;
。。。。。。。。。。。;
when others then
statement1;
statement2;
。。。。。。。。。。。;
能够判断出的异常放到 WHEN 语句中,将那些无法预测的异常放在 OTHERS 中做成错误日志表。
在程序内部的在程序内部捕捉,程序外部的程序外部捕捉,只有都没捕捉到,才会传到环境中。
抛出异常:
RAISE_APPLICATION_ERROR
RAISE_APPLICATION_ERROR(自定义错误编号,自定义信息);
不会被 EXCEPTION 捕捉到,而是直接回显到界面上给用户看到。
在 EXCEPTION 。。。WHEN 。。。THEN 之前或之中都可以使用。
函数:
不能独立出现,只能作为表达式来使用。
create 'or replace' function fun_name
'(parameter1 'mode' datatype;parameter2 'mode' datatype; 。。。)'
return datetype
is/as
pl/sql block;
只能返回一个且必须有一个返回类型。
在 pl/sql block 中必须有一个可以执行的 RETURN子句。
只允许接受 IN 模式的参数。
函数可以返回 BOOLEAN类型,但不能将返回 BOOLEAN 类型的函数应用到 SQL 语句中。
函数的限制:
只能出现查询语句;
不允许出现 DML 操作;
如果在对表 T 进行DML 语句操作调用函数 F,该函数 F 不能对编辑表 T 进行查询;
不允许出现 DDL 语句;
例:
create or replace function sal_m_fun(empl_sal number) return number is
Result number;
begin
第 89 页,共 106 页
…………………………………………………………Page 90……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
if empl_sal print name
NAME
…………………………………………………………………………………
King
SQL》 print sal
SAL
………………………
24000
begin
…Call the procedure
query_emp(p_id =》 :p_id;
p_name =》 :p_name;
p_salary =》 :p_salary;
p_m =》 :p_m);
end;
3。 inout 先传入后传出,可以直接赋予默认值;
编辑并存储;
SHO ERR 查看编辑时错误的命令;
exec 执行存储过程命令;
删除:DROP procedure;
5、管理 PL/SQL 程序块:
管理 PL/SQL程序块:
在用户自己的方案下有 CREATE 权限
对于其他用户的方案有 CREATE ANY 权限
存储过程,函数和包需要执行权限,触发器不需要。
当用户使用其他用户的存储过程或函数去访问其他用户的对象,
能否访问到对象取决与该存储过程或函数的拥有者的权限。
TUTHID CURRENT_USER 表示存储过程不依赖他的拥有者,而依赖与当前调用他的用户。
在 CREATE PROCEDURE 的最后添加。
查看信息:
user_objects;
user_source;
user_errors;
第 91 页,共 106 页
…………………………………………………………Page 92……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
query_emp;对过程的描述。
6、包(package)
一组相关类型的变量,常量,游标,存储过程,函数的集合。
1。组成:
包头:声明部分;只声明PUBLIC PROCEDURE/VARIABLE;
包体:程序实体,包含 PRIVATE PROCEDURE/VARIABLE 、PUBLIC PROCEDURE/VARIABLE 和 LOCAL
VARIABLE;
包头没有包体是可以独立存在的。
包头:
CREATE 'OR REPLACE' PACKAGE package_name
IS
public_type
PROCEDURE procdeure_name (parameter。。。。 );
END package_name;
包体:
CREATE 'OR REPLACE' PACKAGE BODY package_name
IS
private type and item declarations
subprogram bodies
end package_name;
2。构建没有包头的包:
为了在整个会话中的全局变量设计。
如果其他会话访问的话,和定义时候的回话得到的包的值有可能是不一样的。
包体的部分可以通过 WRAP 程序加密。
只有局部过程和被打包的过程才能 OVERLOAD(重载)。
前项声明:
将过程或函数的名称和参数放在包体的头部声明;
建立一次性的过程:
就是在包体中插入了一个匿名块,在包体执行的时候,该匿名块一定会先执行一次该匿名块,
然后再执行包体中的其他部分。
3。SQL中使用包函数的限制
函数中不能包含影响当前事务的语句;
如果在对表 T 进行DML 语句操作调用函数 F,该函数 F 不能对编辑表 T 进行查询;
包中变量的稳定性:
PUBLIC VARIABLE 发生改变的情况:
第 92 页,共 106 页
…………………………………………………………Page 93……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
重新建立会话
符合规则