2014年6月10日火曜日

sqlplus ストアドプロシージャの実行

■コマンド execute

①OUT引数がない時
execute(またexec) プロシージャ名(引数1,引数2,・・)

②OUT引数がある時
VAR v_out NUMBER;

execute(またexec) プロシージャ名(引数1,引数2,・・ :v_out );

例:

SQL>
SQL> variable v_out NUMBER;
SQL> execute  main_proc('引数1', '引数2', :v_out);
SQL> print v_out;
SQL>

[PLS-00201: 識別子V_OUTを宣言してください。]が表示された時、v_out 前に、[:]が付いてるかどうか、確認して下さい。


■SERVEROUTPUT は DBMS_OUTPUT による PL/SQL の標準出力を非表示にするか、出力を許可して任意にバッファサイズを設定する。
•短縮形は SERVEROUT
•デフォルト値 OFF
SET SERVEROUTPUT コマンドの構文

SET SERVEROUTPUT ON [SIZE n]


CREATE OR REPLACE function test_proc return boolean
IS
CURSOR cur_param IS
    SELECT DEF_NAME
      FROM NAME_DEF_LIST
     WHERE NAME_DEF_CD like 'XXXX%';
name_def  varchar2(100);
BEGIN
DBMS_OUTPUT.PUT_LINE('test_proc start');

open cur_param;
loop
 fetch cur_param into name_def;
 exit when cur_param%notfound;
 DBMS_OUTPUT.PUT_LINE('>>' || name_def);
end loop;
close cur_param;
DBMS_OUTPUT.PUT_LINE('test_proc end');
return true;
EXCEPTION
WHEN others THEN
 DBMS_OUTPUT.PUT_LINE('..error..');
 return false;
END;
/

メイン処理:

CREATE OR REPLACE procedure P17GK_V200_MNT_EN.test_main
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('main start');
boolean rtn;
rtn := test_proc();
DBMS_OUTPUT.PUT_LINE('return ' || rtn);

EXCEPTION
WHEN others THEN
 DBMS_OUTPUT.PUT_LINE('..error..');
END;
/

0 件のコメント:

コメントを投稿