pl/sql 过程、函数

来源:互联网 发布:最好java培训 编辑:程序博客网 时间:2024/05/22 14:06


pl/sql中proceduce过程与func函数均为一个程序块,是为完成特定功能的pl/sql语句集。并可接受三种类型的参数。

相同点在于:

1.均可使用out类型参数返回值。

2.均由声明、执行和异常处理三部分组成。

3.均可以接受形参默认值。

4.都可以使用位置表示法和名称表示法进行调用。


不同点在于:函数必须要有返回值,即调用函数时要用一个变量来接受函数的返回值。


一般推荐若返回多个值,使用过程。

若返回一个值,使用函数。


它们都接受三种类型的参数: in、out、in out。

in类型参数:将外部的参数值传递进入程序块中,但是无法在程序块中更改该参数的值。即类似于常量。采用引用传递。

out类型参数:将内部的参数值传出程序块中,与in类型相反,可以在程序块中更改该参数的值。但是无论外部赋什么值,传入程序块中均被初始化为null。

并且采用值传递的形式。当程序块正常结束无异常或错误发生,则将该值传递给外部参数,否则不会传递给外部参数。可以加上nocopy关键字来使用引用传递模式。

in out类型参数:该类型参数可以传递外部参数值进入程序块中,也可以传出内部参数值给外部参数。采用变量值传递。


注意要点:

1.形参只能决定参数的类型,无法决定精度。只有实参可以决定精度。

2.out类型变量在程序块中赋值时不能超过实参精度的限制。

3.形参可以使用默认值。

4.可以采用名称赋值法。如 pout => v_pout,pinout => v_pinout


过程基本语法结构:

创建:

CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [ IN | OUT | IN OUT ] type [,...])]

{ IS | AS }

[ variable type [,...] ]

BEGIN

procedure_body

END procedure_name;      -----procedure_name可以不写

删除:

DROP PROCEDURE procedure_name;

调用过程:

1. excute指令调用。

2. pl/sql代码块中直接调用。


函数基本语法结构:

创建:

CREATE [OR REPLACE] FUNCTION function_name [(parameter_name [ IN | OUT | IN OUT ] type [,...])]

RETURE type

{ IS | AS }

[ variable type [,...] ]

BEGIN

function_body

END function_name;      -----function_name可以不写

删除:

DROP FUNCTION function_name;

调用函数:

无法直接调用,只能作为表达式的一部分进行调用。必须接受返回值,否则报错。


查看过程、函数和包的有关信息:

select * from user_procedures where object_name='my_proc';

查看过程函数代码:

select text from user_source where name = 'MY_PROC';

查看包代码:

select text from user_source where name = 'MY_PKG' AND type =  'PACKAGE';

查看触发器代码:

select text from user_source where name = 'MY_TRIG';

显示错误:

show errors procedure my_proc/function my_func/package my_pack

1 0
原创粉丝点击