【问题标题】:Using Substitution variable in PL/SQL Code在 PL/SQL 代码中使用替换变量
【发布时间】:2013-07-10 03:29:54
【问题描述】:

我正在使用 SQL Developer 并编写此 PL/SQL 代码。但是当我给 B 作为选项时,我得到了错误。请帮忙。

SET SERVEROUTPUT ON

accept q_grade char prompt 'EnterGrade: '
DECLARE
v_grade CHAR(1) := UPPER(&q_grade);
v_appraisal VARCHAR(20);

BEGIN
v_appraisal := CASE v_grade WHEN v_grade = 'A' THEN 'Excellent'
WHEN v_grade = 'B' THEN 'Good'
WHEN v_grade = 'C' THEN 'FAIL'
ELSE 'NO SUCH GRADES'
END;

DBMS_OUTPUT.PUT_LINE ('Grade:  ' || v_grade  || ' Appraisal  ' ||v_appraisal);

END;
/

错误报告:

ORA-06550:第 2 行,第 26 列: PLS-00201:必须声明标识符“B” ORA-06550:第 2 行,第 9 列: PL/SQL:项目被忽略 ORA-06550:第 6 行,第 21 列: PLS-00320:此表达式类型的声明不完整或格式错误 ORA-06550:第 6 行,第 1 列: PL/SQL:语句被忽略 ORA-06550:第 12 行,第 57 列: PLS-00320:此表达式类型的声明不完整或格式错误 ORA-06550:第 12 行,第 21 列: PL/SQL:语句被忽略 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:

【问题讨论】:

  • &q_grade周围加上单引号。

标签: sql plsql plsqldeveloper


【解决方案1】:

变化:

v_grade CHAR(1) := UPPER('&q_grade');

v_appraisal := CASE WHEN v_grade = 'A' THEN 'Excellent'

【讨论】:

    【解决方案2】:

    您需要在CASE 语句之后立即删除多余的v_grade

    BEGIN
    v_appraisal := CASE WHEN v_grade = 'A' THEN 'Excellent'
    /* -- here --------^ */
    

    【讨论】:

    • @JeffreyKemp - 哎呀!你是对的——我不应该在午夜看代码。 :-) 之前的评论已删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多