《oracle从入门到精通(PDF格式)》第32章


只允许接受 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 从入门到精通 
重新建立会话
符合规则
4。与开发相关的系统包:
小说推荐
返回首页返回目录