Oracle_学習開発サブルーチン_関数#カンスウ#


一、開発関数
関数は特定のデータを返すために使用されます.アプリケーションで特定のデータを返す必要がある場合は、操作に基づいて関数を作成できます.関数を使用することで、クライアント・プログラムの開発とメンテナンスを簡素化するだけでなく、アプリケーションのパフォーマンスを向上させることができます.構文は次のとおりです.

create [or replace]function function_name   
(argument1[mode] dateType1,argument2[mode] dateType2........)
return dateType  
IS/AS    
PL/SQL block 

上に示すように、function_nameは関数名、argument 1、argument 2は関数のパラメータを指定し、modeはパラメータモードを指定し、dateType 1、dateType 2は関数のパラメータタイプを指定します.IS/ASは、PL/SQLブロックの開始を表すために使用される.パラメータタイプを指定するとパラメータ長を指定できません.また、関数を作成するときに入力パラメータ(IN)を指定したり、出力パラメータ(OUT)を指定したり、入出力パラメータ(INOUT)を指定したりして、関数の戻り値を指定するデータ型をreturn句で指定できます.関数を作成する場合は、関数ヘッダにreturn句を付け、関数内に少なくとも1つのreturn文を含める必要があります.
1、関数の作成:パラメータなし

create or replace function function_test
return varchar2
is
v_name varchar2(10);
begin
select name into v_name from cip_temps where id=29;
return v_name;
end;

関数を呼び出します.コードは次のとおりです.

SQL> var name varchar2(10)
SQL> exec :name:=function_test1;
SQL> print name;

2、作成関数:INパラメータ付き
関数を作成すると、パラメータを入力してアプリケーションのデータを関数に渡し、最終的に関数を実行して結果をアプリケーションに返すことができます.関数パラメータを定義する場合、関数モードを指定しない場合、デフォルトでは入力パラメータとなりますので、INキーは書き込み不可です.

create or replace function function_in(v_id number)
return varchar2
is
v_name varchar2(10);
begin
select name into v_name from cip_temps where id=v_id;
return v_name;
end;

関数を呼び出します.コードは次のとおりです.

SQL> var name varchar2(10)
SQL> exec :name:=function_in(29);
SQL> print name;

3、確立関数:OUTパラメータ付き
一般に、関数は単一のデータを返す必要があり、関数を使用して複数のデータを同時に返す場合はOUTパラメータを使用する必要があります.

create or replace function function_out
(v_id number,v_age out varchar2)
return varchar2
is
v_name varchar2(10);
begin
select name,age into v_name,v_age from cip_temps where id=v_id;
return v_name;
end;

この関数にはOUTパラメータが付いているので、SQL文では呼び出せません.定義変数でOUTパラメータと関数の戻り値を受け入れる必要があります.
関数を呼び出します.コードは次のとおりです.

SQL> var name varchar2(10)
SQL> var age varchar2(10)
SQL> exec :name:=function_out(29,:age);
SQL> print name age;

4、確立関数:IN OUTパラメータ付き
関数を定義する場合は、INとOUTパラメータだけでなく、IN OUTパラメータを指定することもできます.IN OUTパラメータは入出力パラメータです.このパラメータを使用する場合、関数を呼び出す前に変数でデータを渡す必要があります.呼び出しが終了すると、oracleはこの変数でプロセス結果をアプリケーションに渡します.例は次のとおりです.

create or replace function function_inout
(num1 number,num2 in out number)
return number
is
v1 number;
v2 number;
begin
  v1:=num1+num2;
  v2:=num1*num2;
  num2:=v2;
  return v1;
end;
/

この関数にはOUTパラメータが付いているので、SQL文では呼び出せません.定義変数でOUTパラメータと関数の戻り値を受け入れる必要があります.
関数を呼び出します.コードは次のとおりです.

SQL> var num1 number
SQL> var num2 number
SQL> exec :num2:=10;
SQL> exec :num1:=function_inout(10,:num2);
SQL> print num1 num2;

5、関数呼び出し制限
すべての関数がSQL文の下で呼び出されるわけではありません.SQL文で関数を呼び出すには、次の制限があります.
(1)、SQL文ではストレージ関数(サーバ側)のみを呼び出すことができ、クライアント関数を呼び出すことはできません.
(2)、SQL文で呼び出された関数は入力パラメータ(IN)のみで、出力パラメータ(OUT)と入出力パラメータ(IN OUT)は使用できません.
(3)、SQL文で呼び出された関数にはINSERT、UPDATE、DELETE文は含まれません.
(4)、SQL文で呼び出される関数は、SQL文でサポートされている標準データ型のみを使用でき、PL/SQL固有のデータ型(BOOLEAN、TABLE、RECODEなど)は使用できません.
二、トリガの開発
Oracle_学習開発サブルーチン_フリップフロップ