PLS-00201:必须声明标识符“EMPLOYEES.EMPLOYEE_ID”

时间:2018-02-01 06:01:49

标签: oracle plsql

我已经在这工作了一个多小时了,我无法理解......这是我的代码。任何帮助表示赞赏!

DECLARE 
    v_employee_id employees.employee_id % type;
    v_job employees.job_id % type;
BEGIN
   SELECT
      employee_id,
      job_id INTO v_employee_id,
      v_job 
   FROM
      employees 
   WHERE
      employee_id = 100;

    DECLARE 
        v_employee_id employees.employee_id % type;
        v_job employees.job_id % type;
    BEGIN
       SELECT
          employee_id,
          job_id INTO v_employee_id,
          v_job 
       FROM
          employees 
       WHERE
          employee_id = 103;
       dbms_output.put_line(outer_block.v_employee_id||' is a '||outer_block.v_job);
    END;

    dbms_output.put_line(v_employee_id || ' is a ' || v_job);
END;

2 个答案:

答案 0 :(得分:1)

所以程序实际产生的错误就是:

  

PLS-00201:必须声明标识符'OUTER_BLOCK.V_EMPLOYEE_ID'

投掷线:

dbms_output.put_line(outer_block.v_employee_id || ' is a ' || outer_block.v_job); 

您正在尝试在嵌套块中显示v_employee_id的第一个声明。但是,没有内置outer_block,您需要声明它as a label

因此,要使代码正常工作,您需要在顶部贴上标签:

<< outer_block >>
DECLARE 
    v_employee_id employees.employee_id % type;
    v_job employees.job_id % type;
BEGIN
    ....

以下是使用标签的块的Live SQL demo

一般来说,在嵌套范围内对不同变量使用相同的名称并不是一种好习惯。标签语法允许它,但是很容易忘记标签并引入一个非常难以发现的bug。使用不同的,有意义的变量名称(例如,v_manager_id用于外部块,v_staff_id用于嵌套块)不仅更安全,而且还使我们的代码更容易理解。

答案 1 :(得分:-1)

删除employees.employee_id%

之间的空格

这里例如:

employees.employee_id % type;

这应该是

employees.employee_id%type;

这里有更多错误,但我正在回答你的问题。