Oracle_学习开发子程序_过程

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

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


在创建过程时,如果参数指定了参数名和参数类型,则就不必定义其中的参数名和参数类型。

运用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;
/

注意:
在创建过程时如果出现错误,但是没有标明是哪里出的错误,可以用"show error"命令查看出错的位置
如上所示:当在应用程序中调用该过程时,必须要定义变量接受输出参数的数据,下面在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;

二、开发函数
见<Oracle_学习开发子程序_函数>

你可能感兴趣的:(oracle,sql)