web-dev-qa-db-ja.com

SQL Developerでストアドプロシージャを実行しますか?

複数の入出力パラメータを持つストアドプロシージャを実行しようとしています。この手順は、[接続]パネルで[他のユーザー] | [ |パッケージ| |

を右クリックすると、メニュー項目は「メンバーの順序...」と「ユニットテストの作成」(グレー表示)になります。ユーザーがアクセスした場合、プロシージャを「実行」する機能は使用できないようです。

プロシージャを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:
71
sdoca

簡単に実行できます。結果を取得するのは難しい場合があります。

私が尋ねたこの質問を見てください Oracleパッケージ手順から結果を得るための最良の方法/ツール

その概要は次のようになります。

Mypackageという名前のパッケージとgetQuestionsというプロシージャがあると仮定します。 refcursorを返し、ユーザー名の文字列を受け取ります。

必要なのは、新しいSQLファイル(新規ファイル)を作成することだけです。接続を設定し、以下を貼り付けて実行します。

var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;
26
Conrad Frix

SqlDeveloper 3+を使用している場合、それを見逃した場合に備えて:

SqlDeveloperには、ストアドプロシージャ/関数を直接実行する機能があり、出力は読みやすい方法で表示されます。

Package/stored proc/stored functionを右クリックし、Runをクリックし、実行するproc/funcとしてtargetを選択すると、SqlDeveloperが実行するコードスニペットを生成します(入力パラメーターを配置できるように)。実行されると、出力パラメータはダイアログボックスの下半分に表示され、refカーソルのサポートも組み込まれています。カーソルの結果は別の出力タブとして表示されます。

17
Adrian Shum

SQL Developerでプロシージャを開き、そこから実行します。 SQL Developerは、実行するSQLを表示します。

BEGIN
  PROCEEDURE_NAME_HERE();
END;
11
Noel

つかいます:

BEGIN

  PACKAGE_NAME.PROCEDURE_NAME(parameter_value, ...);

END;

「PACKAGE_NAME」、「PROCEDURE_NAME」、および「parameter_value」を必要なものに置き換えます。 OUTパラメータは事前​​に宣言する必要があります。

6
OMG Ponies

これらの他の答えはどれも私にとってはうまくいきませんでした。 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を使用して変数を宣言しない

これらすべての問題により、頭を悩ませる時間が長くなり、これらの答えはこれらのひどいエラーを取り除いて、タールとフェザーになりました。

1
vapcguy

この質問はかなり古いものですが、SQL Developerから簡単に実行する方法を見つけることなく、同じ結果につまずき続けています。数回試行した後、SQL開発者自身からストアドプロシージャを実行する簡単な方法を見つけました。

  • パッケージで、目的のパッケージを選択し、パッケージ名(ストアドプロシージャ名ではなく)を右クリックします。

  • 実行するオプションがあります。それを選択して、必要な引数を指定します。 [OK]をクリックすると、以下の出力変数セクションに出力が表示されます。

SQL Developerバージョン4.1.3.20を使用しています

1
Narasimha

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;
/
0
Jack

信じられない、これは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行でなければなりません。

0
Amel Music