0

これは私のコードです:

DECLARE 
v_grade CHAR(1) := UPPER('&grade');
appraisal VARCHAR(20);
BEGIN
appraisal := CASE v_grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
WHEN 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE('Grade: '||v_grade||'Appraisal '||appraisal);
END;
/

これは完全なエラー コードです。

ERROR at line 10:
ORA-06550: line 10, column 1:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
 * & = - + < / > at in is mod remainer not rem then
 <an exponent (**)> <> or != or ~= >= <= <> and or like like2
 like4 between || multiset member submultiset.

私は PL/SQL を学んでいて、自分の本の例を試していましたが、何か間違ったことをしたようです。答えを教えないでください。あなたがこれをどのようにトラブルシューティングしたか、どのように間違いを犯したかを知りたいのです。

4

2 に答える 2

2

あなたの最後の句はELSE代わりに使用する必要がありますWHEN

DECLARE 
  v_grade CHAR(1) := 'C';
  appraisal VARCHAR(20);
BEGIN
  appraisal := 
    CASE v_grade
      WHEN 'A' THEN 'Excellent'
      WHEN 'B' THEN 'Very Good'
      WHEN 'C' THEN 'Good'
      ELSE  'No such grade'
    END;
  DBMS_OUTPUT.PUT_LINE('Grade: '||v_grade||', Appraisal '||appraisal);
END;

アップデート

これをトラブルシューティングする方法についてアドバイスを与えることは簡単ではありません (主に個人的な好みの問題であるため)。私が通常試していることは

  • 例を絞り込みます(あなたの場合、 のすべての追加句を取り除きますCASE
  • クエリの問題のある部分を最初から書き直す
  • 機能する同様のクエリをコピーし、そのクエリを徐々に変更して、エラーが発生するまで問題のクエリに似せます
于 2016-04-15T13:36:26.873 に答える
0

このようにコードを書き換えます

DECLARE 
v_grade CHAR(30) := UPPER('&grade');
appraisal VARCHAR(20);
BEGIN
appraisal := CASE v_grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
ELSE 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE('Grade: '||v_grade||'Appraisal '||appraisal);
END;
于 2016-04-15T13:37:32.480 に答える