首页 > 解决方案 > 使用绑定变量时的 SQL 无效标识符

问题描述

使用我在下面写的匿名块,绑定变量给了我错误:我粘贴了下表的图片。

v_corid CHAR(8) := ETHI1022;
                       *
ERROR at line 3:
ORA-06550: line 3, column 24:
PLS-00201: identifier 'ETHI1022' must be declared
ORA-06550: line 0, column 0:
PL/SQL: Compilation unit analysis terminated

我意识到我的内部连接很可能像其他人一样搞砸了。我正在尝试学习这些东西,并且很难学习如何从 select 语句中获取值并将它们放入 declare 部分的变量中。

DECLARE
    v_marstuid MARKS.STUID%TYPE;
    v_corid CHAR(8) := &corid;
    v_avgmark NUMBER(2);
    v_maxmark NUMBER(2);
    v_minmark NUMBER(2);
    v_cordesc VARCHAR2(255);

    ex_CourseNotFound EXCEPTION;
BEGIN
    SELECT Count(M.stuid),
           M.corid,
           Avg(M.mark),
           Max(M.mark),
           Min(M.mark),
           C.descript
    INTO   v_marstuid, v_corid, v_avgmark, v_maxmark,
    v_minmark, v_cordesc
    FROM   marks M
           inner join courses C
                   ON M.corid = C.corid
    WHERE  C.corid = v_corid;

    dbms_output.Put_line (v_corid
                          || ' - '
                          || v_cordesc);

    dbms_output.Put_line ('Course Stats: ');

    dbms_output.Put_line ('Number of students: '
                          || v_marstuid);

    dbms_output.Put_line ('Average: '
                          || v_avgmark);

    dbms_output.Put_line ('Marks Range: ');

    dbms_output.Put_line ('High: '
                          || v_maxmark);

    dbms_output.Put_line ('Low: '
                          || v_minmark);

EXCEPTION
    WHEN ex_CourseNotFound THEN
    DBMS_OUTPUT.PUT_LINE(v_corcode || ' Does not exist.');
END;

/ 

[使用表]

1

标签: sqloracle-sqldeveloperinner-join

解决方案


而不是ETHI1022,它应该是'ETHI1022'。你的内部连接很好。从您获得价值的地方corid。使它的类型为 varchar/string 或类似的东西。

或者你可以试试 v_corid CHAR(8) := ''''||&corid||'''';


推荐阅读