在 plsql 块中编译游标时出错
Posted
技术标签:
【中文标题】在 plsql 块中编译游标时出错【英文标题】:Error while compiling cursor in plsql block 【发布时间】:2020-01-04 10:25:37 【问题描述】:我有一张桌子作为员工。我是 oracle 的新手。我正在创建光标,但是在编译时出现错误:
DECLARE
CURSOR c_data IS
SELECT distinct dept_id
FROM offc.employee;
tmp_event offc.employee.dept_id%type;
BEGIN
OPEN c_data;
LOOP
FETCH c_data INTO tmp_event;
EXIT WHEN c_data%NOTFOUND;
Dbms_Output.Put_Line(tmp_event.dept_id);
END LOOP;
CLOSE c_data;
END;
/
我得到如下错误:
第 1 行错误 ORA-06550: 第 15 行,第 40 列:PLS-00487: 无效 引用变量 'TMP_EVENT' ORA-06550: 第 15 行,第 9 列: PL/SQL:语句被忽略
我认为tmp_event声明有问题。如何处理这个错误?
【问题讨论】:
【参考方案1】:你应该使用Dbms_Output.Put_Line(tmp_event);
其中tmp_event
是一个已经是offc.employee.dept_id%type
类型的变量
This link 将有助于了解详细信息。
【讨论】:
【参考方案2】:试试下面的查询
DECLARE
CURSOR c_data IS
SELECT distinct dept_id
FROM offc.employee;
tmp_event offc.employee.dept_id%type;
BEGIN
OPEN c_data;
LOOP
FETCH c_data INTO tmp_event;
EXIT WHEN c_data%NOTFOUND;
dbms_output.Put_line(tmp_event); --Dont Use Dept id
END LOOP;
CLOSE c_data;
END;
/
【讨论】:
【参考方案3】:以下 PL/SQL 语句与原始语句等效,但更短,因此更不容易出现编程错误。
DECLARE
CURSOR c_data IS
SELECT DISTINCT dept_id
FROM offc.employee;
BEGIN
FOR r_data IN c_data LOOP
Dbms_Output.Put_Line(r_data.dept_id);
END LOOP;
END;
/
【讨论】:
以上是关于在 plsql 块中编译游标时出错的主要内容,如果未能解决你的问题,请参考以下文章