我已经在这工作了一个多小时了,我无法理解......这是我的代码。任何帮助表示赞赏!
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;
答案 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;
这里有更多错误,但我正在回答你的问题。