Oracle_学習開発サブルーチン_プロセス

4320 ワード

サブルーチンとは、パラメータを持つことができ、異なるアプリケーションで複数回呼び出すことができる名前のPL/SQLブロックを指します.PL/SQLには、特定の操作を実行するためのプロシージャと関数と、特定のデータを返すための関数の2種類のサブルーチンがあります.
一、開発プロセス
プロシージャは、特定のアクションを実行するために使用されます.アプリケーションで特定のアクションを実行する必要がある場合は、アクションに基づいてプロシージャを作成できます.プロシージャを使用することで、クライアント・プログラムの開発とメンテナンスを簡素化するだけでなく、アプリケーションのパフォーマンスを向上させることができます.構文は次のとおりです.

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

上記のように:procedure_nameはプロシージャ名を指定し、argument 1、argument 2はプロシージャのパラメータを指定し、modeはパラメータモードを指定し、dateType 1、dateType 2はプロシージャのパラメータタイプを指定します.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_が確立されましたtest 1後、このプロシージャを呼び出すことができます.SQL*Plus環境でプロシージャを呼び出すには、execute(exeと略記)コマンドを使用する方法と、callコマンドを使用する方法の2つがあります.次のようにします.
例1:executeコマンドを使用してプロシージャを呼び出す
    

      set serveroutput on;
      execute procedure_test1;
    

例2: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_学習開発サブルーチン_関数>