3

ストアドプロシージャがあります。ToadforOracleで、を使用してプロシージャを呼び出しています。

SELECT FROM PKGName.ProcedureName(1,'10/10/2010','10/23/2010',7,7) 
  FROM DUAL

この手順には3つの出力パラメータがあります。

ORA-00904:PKGName.ProcedureName:識別子が無効です

プロシージャ呼び出しの出力パラメータについても言及する必要がありますか?はいの場合、どうすれば使用できますか?

4

6 に答える 6

5

SELECTステートメントでプロシージャを使用することはできません。機能はい(適切なリターンタイプを使用)、手順いいえ。SELECTリストの項目は、値に解決される式である必要があります。手順はこの基準を満たしていません。

はい、パラメータリストで出力変数について言及する必要があります。プロシージャはこれらのパラメータをいくつかの値に設定します。それらを受け取るには、それぞれに出力パラメータを指定する必要があります。@schurikは、PL/SQLで通常どのように行われるかを示しています。@Datajamは、SQL * Plusで行う方法に近いですが、出力パラメータを省略しています。

SQL> var num_var number
SQL> var txt_var varchar2(15)
SQL> var txt_var2 varchar2(20)

SQL> exec PKGName.ProcedureName(1,'10/10/2010','10/23/2010',7,7, :num_var, :txt_var, :txt_var2);

PL/SQL procedure successfully completed
num_var
---------------
42
txt_var
-----------------
some text
txt_var2
-------------------
some other text

SQL> 
于 2011-05-27T15:58:58.243 に答える
2
declare 
  -- declare variables to keep output values
  output_par_1 varchar2(100);
  output_par_2 number(10);
  ...
begin
  PKGName.ProcedureName(1,'10/10/2010','10/23/2010',output_par_1,output_par_2);

  -- display output values
  dbms_output.put_line('output_par_1: ' || output_par_1);
  dbms_output.put_line('output_par_2: ' || output_par_2);
end;
/
于 2011-05-27T15:35:38.637 に答える
1

selectからプロシージャを呼び出せるようにする場合は、関数またはテーブル関数でラップします。詳細については、こちらをご覧ください:http ://technology.amis.nl/blog/1017/calling-stored-procedures-using-plain-sql-for-when-sql-is-allowed-but-calls-to-stored-手順はありません(タイトルはほとんど記事です)。

于 2011-05-27T16:06:45.277 に答える
0

はい、すべての引数を指定する必要があります。適切なタイプの変数を宣言し、それを出力引数として渡します。

于 2011-05-27T15:30:34.143 に答える
0

SELECTステートメントを使用してプロシージャを実際に呼び出すべきではありません(呼び出したとしても、呼び出しはFROM部分の前になります)。

代わりに、SQL * Plusプロンプトを使用してください(ToadにはSQL * Plusインターフェイスが組み込まれていると思います)。

exec PKGName.ProcedureName(1,'10/10/2010','10/23/2010',7,7);
于 2011-05-27T15:30:45.577 に答える
-1

問題のコードは構文的に間違っています。

SELECT PKGName.ProcedureName(1,'10/10/2010','10/23/2010',7,7) FROM DUAL

ただし、これは関数に対してのみ機能します。しかし、それは明らかにToadで機能しているので、ポスターには実際に機能があったと思います。また、SQLの使用が前提条件であると仮定しました。

質問のポイントが複数の出力パラメーターを使用する方法であった場合は、ユーザー定義型を作成してみてください。おそらく、質問の名前を「OracleのSQLからの出力パラメータを使用してプロシージャを呼び出す」に変更する必要があります。

そうでなければ、出力パラメーターのない単純なラッパー関数がその仕事をします。

于 2011-05-27T15:31:04.090 に答える