DECLARE
 v_garde char(1) :=upper('&p grade');
 v_appr varchar2(20);
BEGIN
 v_appr:=
 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'||v_appr);
END;
運行的時候老是出錯 請問錯在哪裡呀?

解决方案 »

  1.   

    DECLARE 
    v_grade char(1) :=upper('&p_grade'); 
    v_appr varchar2(20); 
    BEGIN 
    v_appr:= 
    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'||v_appr); 
    END; 
    /
      

  2.   

    SQL> DECLARE
      2  v_grade char(7) :=upper('&p grade');--定义错误
      3  v_appr varchar2(20);
      4  BEGIN
      5  v_appr:=
      6  case v_grade
      7    when 'A' then 'excellent'
      8    when 'B' then 'very good'
      9    when 'C' then 'good'
     10    ELSE 'NO such grade'
     11    END;
     12    dbms_output.put_line('grade:'||v_grade||' appraisal '||v_appr);
     13  END;
     14  /
    输入 p 的值:  a
    原值    2: v_grade char(7) :=upper('&p grade');
    新值    2: v_grade char(7) :=upper('a grade');
    grade:A GRADE appraisal NO such gradePL/SQL 过程已成功完成。
      

  3.   


    SQL>  DECLARE
      2      v_grade char(1) :=upper('&p');
      3     v_appr varchar2(20);
      4      BEGIN
      5      v_appr:=
      6      case v_grade
      7        when 'A' then 'excellent'
      8       when 'B' then 'very good'
      9       when 'C' then 'good'
     10      ELSE 'NO such grade'
     11      END;
     12     dbms_output.put_line('grade:'||v_grade||' appraisal '||v_appr);
     13    END;
     14    /
    输入 p 的值:  a
    原值    2:     v_grade char(1) :=upper('&p');
    新值    2:     v_grade char(1) :=upper('a');
    grade:A appraisal excellentPL/SQL 过程已成功完成。
      

  4.   

    奧  謝謝 大家改過來了  但是還有錯誤哦,現在的代碼是:
     DECLARE
     v_garde varchar2(1) :=upper('&p v_garde');
     v_appr  varchar2(20);
    BEGIN
     v_appr:=
     case v_garde
      when 'A' then 'excellent'
      when 'B' then 'very good'
      when 'C' then 'good'
      ELSE 'NO such grade'
      END;
      dbms_output.put_line('garde:'||v_garde||'appraisal'||v_appr);
    END;但提示的錯誤是:
    ORA_06502: PL/SQL:NUMERIC or value error : character string buffer too small
    ORA-06512:at line 2
    06502.0000 -"PL/SQL:numeric or value error"
    error at line :1 
      

  5.   

    upper('&p v_garde')-->upper('&v_garde')
    输入的时候注意最多输入一个字符
      

  6.   

    謝謝 5樓的大哥!! 為什麼v_grade的長度要是7或者>7呢? 謝謝
      

  7.   

    因为' grade' 已经6字符了,所以定义为7
    你的' v_grade'已经8字符了,所以至少定义为9
      

  8.   


    v_garde varchar2(1) :=upper('&p v_garde');&只起个简单的替换作用,你这样定义v_garde(应该是v_grade),至少长度>8,('&p v_garde',后面的' v_garde'就8个字符了,再加上你输入的P);根据你下面的逻辑,如果去掉空格,就可以满足了。。