Oracle_学习开发子程序_过程

子程序是指被命名的PL/SQL块,这些块可以带有参数,可以在不同应用中多次调用,PL/SQL有两种类型子程序:过程和函数,其中过程是用于执行特定操作,而函数是用于返回特定数据。
[b]一、开发过程[/b]
过程用于执行特定操作,如果在应用程序中经常需要执行特定的操作,可以基于操作建立一个过程,通过使用过程,不仅可以简化客户端程序的开发和维护,而且还可以提高应用程序的性能,语法如下:

create [or replace]procedure procedure_name
(argument1[mode] dateType1,argument2[mode] dateType2........)
IS/AS
PL/SQL block

[color=red]如上所示:procedure_name用于指定过程名称,argument1、argument2用于指定过程的参数,mode用于指定参数模式,dateType1、dateType2用于指定过程参数类型;IS/AS用于表示开始一个PL/SQL块。当指定参数类型时不能指定参数长度,另外当建立过程时即可以指定输入参数(IN),也可以指定输出参数(OUT),又可以指定输入输出参数(INOUT),通过在过程中使用输入参数,可以将应用程序的数据传递到执行部分,通过使用过程中的输出参数,可以将执行部分的数据传递到应用程序中。定义子程序的参数时,如果不指定参数模式,则默认为输入参数,如果定义输出参数,那么需要指定OUT关键字,如果要定义输入输出参数,则需要指定INOUT关键字。[/color]
1、建立过程:不带参数
示例如下:

create or replace procedure procedure_test1
is
begin
dbms_output.put_line(to_char(sysdate,'YYYY-MM-DD'));
end;
/

建立了过程procedure_test1后,就可以调用该过程了。在SQL*Plus环境中调用过程有两种方法,一种是使用execute(简写为exe)命令,另一种是使用call命令,如下:
示例一:使用execute命令调用过程

set serveroutput on;
execute procedure_test1;

示例二:使用call命令调用过程

SQL>set serveroutput on;
SQL>call procedure_test1();

2、建立过程:带有IN参数
示例如下:

create or replace procedure procedure_in
(v_name varchar2,v_age varchar2,v_address varchar2,v_id number)
is
begin
insert into cip_temps values(v_name,v_age,v_address,v_id);
end;
/

[color=red]
在创建过程时,如果参数指定了参数名和参数类型,则就不必定义其中的参数名和参数类型。[/color]
运用exec、call调用创建完毕的procedure_insert过程,代码如下:

SQL>exec procedure_in('888','888','888',888);
SQL>exec procedure_in('999','999','999',999);

3、建立过程:带有OUT参数
过程不仅可以用于执行特定操作,也可以用于输出数据,在过程中用于输出数据时使用OUT或INOUT参数完成的。
示例如下:

CREATE OR REPLACE procedure procedure_out
(v_name out varchar2,v_age out varchar2,v_address out varchar2,v_id number,error out varchar2)
is
begin
select name,age,address into v_name,v_age,v_address from cip_temps where id=v_id;
exception
when no_data_found then
error:='1';
end;
/

注意:
[color=red]在创建过程时如果出现错误,但是没有标明是哪里出的错误,可以用"show error"命令查看出错的位置[/color]
如上所示:当在应用程序中调用该过程时,必须要定义变量接受输出参数的数据,下面在SQL*Plus中调用过程示例:

SQL> var name varchar2(10)
SQL> var age varchar2(10)
SQL> var address varchar2(10)
SQL> var error varchar2(10)
SQL> exec procedure_out(:name,:age,:address,888,:error);
SQL> print name age address error;
SQL> print error;

4、建立过程:带有INOUT参数
定义过程时,不仅可以定义IN和OUT参数,也可以指定IN OUT参数,IN OUT参数为输入输出参数,当使用这种参数时,在调用过程之前需要通过变量给该参数传递数据,在调用结束之后,oracle会通过该变量将过程结果传递给应用程序,示例如下:

create or replace procedure procedure_inout
(num1 in out number,num2 in out number)
is
v1 number;
v2 number;
begin
v1:=num1/num2;
v2:=num1+num2;
num1:=v1;
num2:=v2;
end;
/

调用过程

SQL> var num1 number
SQL> var num2 number
SQL> exec :num1:=12
SQL> exec :num2:=12
SQL> exec procedure_inout(:num1,:num2);
SQL> print num1 num2;

[b]二、开发函数[/b]
[url=http://shawnfree.iteye.com/admin/blogs/358103]见<Oracle_学习开发子程序_函数>[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值