1

ここにはいくつかの簡単な問題がありますが、集中するのに苦労して何時間も起きていたので、新鮮な頭を持つ他の誰かがこの簡単な質問に答えてくれることを願っています.SQL Developerで私にとってうまくいく良い答えを見つけることができないようです.

DECLARE
  TEST123 NUMBER;
BEGIN
  SELECT COUNT(APP_ID) INTO TEST123 FROM applicant_credit;
  SELECT * FROM APPLICANT_CREDIT;
END;

これを実行すると、私には十分に簡単に思えますが、エラーが発生します:

エラー レポート: ORA-06550: 行 5、列 3: PLS-00428: この SELECT ステートメントでは INTO 句が必要です 06550. 00000 - "行 %s、列 %s:\n%s" *原因: 通常は PL /SQL コンパイル エラー。

また、作成したストアド プロシージャがあり、ハードコードされた番号を送信すると機能しますが、前のクエリで述べたapplicant_creditからのレコード数を渡す必要があります。ストアドプロシージャの実行は、ブロックの外側と同じように上記のブロックで機能しますか。それで、これはうまくいくはずですか??

DECLARE
  TEST123 NUMBER;
BEGIN
  SELECT COUNT(APP_ID) INTO TEST123 FROM applicant_credit;
  EXECUTE UPDATE_DECISION(102, 1, 1, 1, 1, TEST123);
  SELECT * FROM APPLICANT_CREDIT;
END;

これを実行すると、次のようになります。

エラー レポート: ORA-06550: 行 5、列 11: PLS-00103: 次のいずれかを期待しているときに、シンボル "UPDATE_DECISION" が発生しました:

:= . ( @ % ; 即時 続行するには、「UPDATE_DECISION」の代わりに記号「:=」が使用されました。

ここで少し壁にぶつかりますが、どんな助けも大歓迎です!!

4

2 に答える 2

2

最初のSQL文では、そのようにplsqlブロック内でselect *文を実行できないため、そのエラーが発生しています。カーソルまたは一括収集ステートメントを使用するか、select * の出力をレコードのコレクションに「リダイレクト」するその他の方法を使用できます。

DECLARE
  TEST123 NUMBER;
  cursor c_cur
  is select col_1, col_2 from application_credit;
BEGIN
  SELECT COUNT(APP_ID) INTO TEST123 FROM applicant_credit;
  -- loop through the cursor if required
END;

plsql ブロッ​​ク内で実行ステートメントを使用できないため、2 番目の sql ステートメントでエラーが発生しました (まったく異なる即時実行でない限り)。したがって、次のようにコードを変更できます:-

DECLARE
  TEST123 NUMBER;
  cursor c_cur is
  select col1, col2 from applicant_credit;
BEGIN
  SELECT COUNT(APP_ID) INTO TEST123 FROM applicant_credit;
  UPDATE_DECISION(102, 1, 1, 1, 1, TEST123);
  -- loop through the cursor if required
END;

いくつかの役立つリンク:-

http://www.techonthenet.com/oracle/cursors/declare.php

http://www.oracle.com/technetwork/issue-archive/2008/08-mar/o28plsql-095155.html

于 2013-03-14T02:24:23.857 に答える
0

PL/SQL を学習しようとしない限り、PL/SQL はまったく必要ありません。すべて SQL のみで実行できます。

DECLARE
  TEST123 NUMBER:= 0;
BEGIN
  UPDATE_DECISION(102, 1, 1, 1, 1, TEST123);

 -- The outer query is not required, this is only to show you the correct syntax.
  SELECT * INTO TEST123 -- you are selecting from applicant_credit
    FROM 
   (
    SELECT COUNT(app_id) FROM applicant_credit
   );
END;
/
于 2013-03-14T14:14:49.597 に答える