複数の入出力パラメータを持つストアドプロシージャを実行しようとしています。この手順は、[接続]パネルで[他のユーザー] | [ |パッケージ| |
を右クリックすると、メニュー項目は「メンバーの順序...」と「ユニットテストの作成」(グレー表示)になります。ユーザーがアクセスした場合、プロシージャを「実行」する機能は使用できないようです。
プロシージャをSQLファイルとして実行できるように匿名ブロックを作成する方法の例を見つけようとしましたが、機能するものは見つかりませんでした。
SQL Developerからこのプロシージャを実行する方法を知っている人はいますか?バージョン2.1.1.64を使用しています。
前もって感謝します!
編集1:
呼び出したいプロシージャには、次のシグネチャがあります。
user.package.procedure(
p_1 IN NUMBER,
p_2 IN NUMBER,
p_3 OUT VARCHAR2,
p_4 OUT VARCHAR2,
p_5 OUT VARCHAR2,
p_6 OUT NUMBER)
このように匿名ブロックを書くと:
DECLARE
out1 VARCHAR2(100);
out2 VARCHAR2(100);
out3 VARCHAR2(100);
out4 NUMBER(100);
BEGIN
EXECUTE user.package.procedure (33,89, :out1, :out2, :out3, :out4);
END;
エラーが表示されます:
Bind Varialbe "out1" is NOT DECLCARED
anonymous block completed
Out *変数を初期化してみました:
out1 VARCHAR2(100) := '';
しかし、同じエラーが発生します:
編集2:
アレックスの答えに基づいて、パラメーターの前からコロンを削除して、これを取得しようとしました:
Error starting at line 1 in command:
DECLARE
out1 VARCHAR2(100);
out2 VARCHAR2(100);
out3 VARCHAR2(100);
out4 NUMBER(100);
BEGIN
EXECUTE user.package.procedure (33,89, out1, out2, out3, out4);
END;
Error report:
ORA-06550: line 13, column 17:
PLS-00103: Encountered the symbol "USER" when expecting one of the following:
:= . ( @ % ; immediate
The symbol ":=" was substituted for "USER" to continue.
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
簡単に実行できます。結果を取得するのは難しい場合があります。
私が尋ねたこの質問を見てください Oracleパッケージ手順から結果を得るための最良の方法/ツール
その概要は次のようになります。
Mypackageという名前のパッケージとgetQuestionsというプロシージャがあると仮定します。 refcursorを返し、ユーザー名の文字列を受け取ります。
必要なのは、新しいSQLファイル(新規ファイル)を作成することだけです。接続を設定し、以下を貼り付けて実行します。
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;
SqlDeveloper 3+を使用している場合、それを見逃した場合に備えて:
SqlDeveloperには、ストアドプロシージャ/関数を直接実行する機能があり、出力は読みやすい方法で表示されます。
Package/stored proc/stored functionを右クリックし、Run
をクリックし、実行するproc/funcとしてtarget
を選択すると、SqlDeveloperが実行するコードスニペットを生成します(入力パラメーターを配置できるように)。実行されると、出力パラメータはダイアログボックスの下半分に表示され、refカーソルのサポートも組み込まれています。カーソルの結果は別の出力タブとして表示されます。
SQL Developerでプロシージャを開き、そこから実行します。 SQL Developerは、実行するSQLを表示します。
BEGIN
PROCEEDURE_NAME_HERE();
END;
つかいます:
BEGIN
PACKAGE_NAME.PROCEDURE_NAME(parameter_value, ...);
END;
「PACKAGE_NAME」、「PROCEDURE_NAME」、および「parameter_value」を必要なものに置き換えます。 OUTパラメータは事前に宣言する必要があります。
これらの他の答えはどれも私にとってはうまくいきませんでした。 SQL Developer 3.2.20.10でプロシージャを実行するために私がしなければならなかったことは次のとおりです。
SET serveroutput on;
DECLARE
testvar varchar(100);
BEGIN
testvar := 'dude';
schema.MY_PROC(testvar);
dbms_output.enable;
dbms_output.put_line(testvar);
END;
そして、渡された変数でprocが行うことになっていたことをテーブルで確認する必要があります-出力は変数が値を受け取ったことを確認します(理論的にはprocに渡しました)。
NOTE(私のものと他のものとの違い):
:
はありません.package.
または.packages.
を挿入しない&
を入れる必要はありません。print
を使用しないvar
を使用して変数を宣言しないこれらすべての問題により、頭を悩ませる時間が長くなり、これらの答えはこれらのひどいエラーを取り除いて、タールとフェザーになりました。
この質問はかなり古いものですが、SQL Developerから簡単に実行する方法を見つけることなく、同じ結果につまずき続けています。数回試行した後、SQL開発者自身からストアドプロシージャを実行する簡単な方法を見つけました。
パッケージで、目的のパッケージを選択し、パッケージ名(ストアドプロシージャ名ではなく)を右クリックします。
実行するオプションがあります。それを選択して、必要な引数を指定します。 [OK]をクリックすると、以下の出力変数セクションに出力が表示されます。
SQL Developerバージョン4.1.3.20を使用しています
SQL Developerバージョン4.0.2.15ビルド15.21を使用すると、次のように機能します。
SET SERVEROUTPUT ON
var InParam1 varchar2(100)
var InParam2 varchar2(100)
var InParam3 varchar2(100)
var OutParam1 varchar2(100)
BEGIN
/* Assign values to IN parameters */
:InParam1 := 'one';
:InParam2 := 'two';
:InParam3 := 'three';
/* Call procedure within package, identifying schema if necessary */
schema.package.procedure(:InParam1, :InParam2, :InParam3, :OutParam1);
dbms_output.enable;
dbms_output.put_line('OutParam1: ' || :OutParam1);
END;
/
信じられない、これはSQL Developerでは実行されない:
var r refcursor;
exec PCK.SOME_SP(:r,
'02619857');
print r;
しかし、これは:
var r refcursor;
exec TAPI_OVLASCENJA.ARH_SELECT_NAKON_PRESTANKA_REG(:r, '02619857');
print r;
明らかに、すべてが1行でなければなりません。