SQL DeveloperまたはEmbarcardero Rapid XE2でOracleストアドプロシージャをテストする方法についての良い説明を探しています。ありがとうございました。
何かのようなもの
create or replace procedure my_proc( p_rc OUT SYS_REFCURSOR )
as
begin
open p_rc
for select 1 col1
from dual;
end;
/
variable rc refcursor;
exec my_proc( :rc );
print rc;
sQL * PlusまたはSQL Developerで動作します。 Embarcardero Rapid XE2の使用経験がないため、このようなSQL * Plusコマンドをサポートしているかどうかわかりません。
このようなものを使用すると、ほとんどすべてのクライアントでプロシージャをテストできます。
DECLARE
v_cur SYS_REFCURSOR;
v_a VARCHAR2(10);
v_b VARCHAR2(10);
BEGIN
your_proc(v_cur);
LOOP
FETCH v_cur INTO v_a, v_b;
EXIT WHEN v_cur%NOTFOUND;
dbms_output.put_line(v_a || ' ' || v_b);
END LOOP;
CLOSE v_cur;
END;
基本的に、テストハーネスはSYS_REFCURSOR
変数の定義と、定義した変数を渡しながらプロシージャを呼び出す機能をサポートし、カーソル結果セットをループする必要があります。 PL/SQLはそれをすべて行います。匿名ブロックは、セットアップと保守が容易で、かなり適応性があり、PL/SQLを使用するすべての人にとって非常に読みやすいものです。
別の方法ですが、同じことを行う名前付きプロシージャを作成し、クライアントにデバッガー(SQL Developer、PL/SQL Developer、TOADなど)があると仮定すると、実行をステップ実行できます。
SQL Developerでは、パッケージ本体を右クリックして、「実行」を選択できます。 「PL/SQLの実行」ウィンドウでは、PL/SQLブロックを編集できます。 [OK]をクリックすると、[出力変数-ログ]というタイトルのウィンドウペインに出力変数タブが表示されます。左側で出力変数を選択でき、結果が右側に表示されます。非常に便利で高速です。
RapidをT-SQLで使用しましたが、これに似たものがあったと思います。
DCookieの例のように、カーソルをループする独自のdelcare-begin-endスクリプトを作成することは、時々行う良い練習です。それは何でも動作し、あなたのコードが動作することがわかります。
Toad 10.1.1.8では、次を使用します。
variable salida refcursor
exec MY_PKG.MY_PRC(1, 2, 3, :salida) -- 1, 2, 3 are params
print salida
次に、スクリプトとして実行します。
create or replace procedure my_proc( v_number IN number,p_rc OUT SYS_REFCURSOR )
as
begin
open p_rc
for select 1 col1
from dual;
end;
/
そして、ストアドプロシージャを呼び出す関数嘘を書いてください
create or replace function my_proc_test(v_number IN NUMBER) RETURN sys_refcursor
as
p_rc sys_refcursor;
begin
my_proc(v_number,p_rc);
return p_rc;
end
/
その後、SQLDeveloperエディターでこのSQLクエリを実行できます。
SELECT my_proc_test(3) FROM DUAL;
コンソールで結果を右クリックし、単一のレコードビューでクリックして結果を編集し、refカーソルによって返されたすべてのレコードを表示できます。
このリンクで十分だと思います。 Oracleプロシージャを実行する方法を探していたときに見つけました。
簡単な説明:
--cursor variable declaration
variable Out_Ref_Cursor refcursor;
--execute procedure
execute get_employees_name(IN_Variable,:Out_Ref_Cursor);
--display result referenced by ref cursor.
print Out_Ref_Cursor;