oracleクラス収録-パラメータ
3860 ワード
ストレージ・プロシージャを作成する際に、パラメータを使用することでプログラム・ユニットを柔軟にすることができ、パラメータはプログラム・ユニットにデータを入力および出力するメカニズムであり、ストレージ・プロシージャはゼロから複数のパラメータに戻ることができる.
1.INパラメータ
このタイプのパラメータ値は呼び出し元によって入力され、ストレージ・プロシージャによってのみ読み込まれます.
名前でパラメータを渡す
2.OUTパラメータ
OUTタイプのパラメータは、ストレージ・プロシージャによって値が入力され、ユーザによってパラメータ値が受け入れられる.
さっき作成したストレージ・プロシージャsearch_を呼び出します.employee
SELECT文でバインドされた変数値を取得することもできます
匿名ブロックでストレージ・プロシージャsearch_を再呼び出しemployee
3.IN OUTパラメータ
IN OUTパラメータは、プロシージャを呼び出す際に、そのタイプのパラメータに値を入力してもよいし、そのパラメータから値を受信してもよい.
栗を挙げて、2つのデータを交換する位置
栗ではSWAPプロセスは2つの変数の値を交換するために同時に2つのパラメータを入力する必要があり,交換が完了した後に2つのパラメータを同時に返す必要がある.
匿名ブロック呼び出しSWAPストアドプロシージャ
1.INパラメータ
このタイプのパラメータ値は呼び出し元によって入力され、ストレージ・プロシージャによってのみ読み込まれます.
SQL> create or replace procedure add_employee(
2 id_param in number,
3 name_param in varchar2,
4 job_param in varchar2,
5 hire_param in date,
6 salary_param in number
7 )is
8 begin
9 insert into scott.emp(empno,ename,job,hiredate,sal)
10 values(id_param,name_param,job_param,hire_param,salary_param);
11 end add_employee;
12 /
。
名前でパラメータを渡す
SQL> alter session set nls_date_format='yyyy-mm-dd';
。
SQL> begin
2 add_employee(id_param=>8000,name_param=>'ATG',
3 job_param=>'CLERK',hire_param=>'1997-12-20',
4 salary_param=>1500);
5 end;
6 /
PL/SQL 。
位置伝達法によりパラメータを伝達するSQL> exec add_employee(8021,' ','SALESMAN','1995-10-17',2000);
PL/SQL 。
はまた、混合表現を用いてパラメータを伝達することもできる.2.OUTパラメータ
OUTタイプのパラメータは、ストレージ・プロシージャによって値が入力され、ユーザによってパラメータ値が受け入れられる.
SQL> create or replace procedure search_employee(
2 empno_param in number,
3 name_param out scott.emp.ename%type,
4 salary_param out scott.emp.sal%type
5 )is
6 begin
7 select ename,sal
8 into name_param,salary_param
9 from scott.emp
10 where empno=empno_param;
11 exception
12 when no_data_found then
13 name_param:='NULL';
14 salary_param:=-1;
15 dbms_output.put_line(' !');
16 end search_employee;
17 /
。
プロシージャには戻り値があるため、呼び出すときに戻り値を受け入れる変数を指定する必要があります.さっき作成したストレージ・プロシージャsearch_を呼び出します.employee
SQL> variable name varchar2(10);
SQL> variable sal number;
SQL> exec search_employee(7499,:name,:sal);
PL/SQL 。
実行結果の表示SQL> print name
NAME
--------------------------------
ALLEN
SQL> print sal
SAL
----------
1600
SELECT文でバインドされた変数値を取得することもできます
SQL> select :name,:sal
2 from dual;
:NAME :SAL
-------------------------------- ----------
ALLEN 1600
匿名ブロックでストレージ・プロシージャsearch_を再呼び出しemployee
SQL> set serverout on
SQL> declare
2 name scott.emp.ename%type;
3 sal scott.emp.sal%type;
4 begin
5 search_employee(7499,name,sal);
6 dbms_output.put_line('name:'||name);
7 dbms_output.put_line('sal:'||sal);
8 end;
9 /
name:ALLEN
sal:1600
PL/SQL 。
OUTパラメータを持つ記憶プロセスを呼び出す場合、OUTパラメータに変数を提供する必要があります.OUTパラメータがプロセス中に戻り値を設定していなくても、呼び出すときに受信変数を提供しなければなりません.そうしないと、エラーが発生します.3.IN OUTパラメータ
IN OUTパラメータは、プロシージャを呼び出す際に、そのタイプのパラメータに値を入力してもよいし、そのパラメータから値を受信してもよい.
栗を挙げて、2つのデータを交換する位置
SQL> create or replace procedure swap(
2 num1_param in out number,
3 num2_param in out number) is
4 var_temp number;
5 begin
6 var_temp:=num1_param;
7 num1_param:=num2_param;
8 num2_param:=var_temp;
9 end swap;
10 /
。
栗ではSWAPプロセスは2つの変数の値を交換するために同時に2つのパラメータを入力する必要があり,交換が完了した後に2つのパラメータを同時に返す必要がある.
匿名ブロック呼び出しSWAPストアドプロシージャ
SQL> set serverout on
SQL> declare
2 var_max number:=23;
3 var_min number:=45;
4 begin
5 if var_max<var_min then
6 swap(var_max,var_min);
7 end if;
8 dbms_output.put_line(var_max||'>'||var_min);
9 end;
10 /
45>23
PL/SQL 。