【发布时间】:2021-07-07 05:06:21
【问题描述】:
我是学习 PLSQL 的新手,对 PLSQL 中的对象类型(抽象数据类型)绝对是新手。所以无论如何,我在定义游标时看到了我公司使用表运算符的代码,所以我想尝试一下。在以下匿名块中,我收到一个错误 “PLS-00386:在 FETCH 游标和 INTO 变量之间的 'V_CU' 处发现类型不匹配”但是当我在声明 V_CU 时使用 c%rowtype (注释部分)而不是 obj_emp 时,我没有收到该错误。我无法理解这个错误的原因。
毕竟一行光标 c 由对象 obj_emp 的单个元素组成,不是吗?
CREATE OR REPLACE TYPE obj_emp IS OBJECT (
first_name VARCHAR2(80),
last_name VARCHAR2(80),
salary NUMBER
);
/
CREATE OR REPLACE TYPE tab_emp_t IS TABLE OF obj_emp;
/
declare
v_num number:=60;
tab_emp tab_emp_t :=tab_emp_t();
cursor c is select * from table(tab_emp);
v_cu obj_emp --c%rowtype
;
begin
for i in (select * from employees_copy where department_id = v_num) loop
tab_emp.extend;
tab_emp(tab_emp.last):=obj_emp(i.first_name, i.LAST_NAME, i.salary);
end loop;
open c;
loop
fetch c into v_cu;
exit when c%notfound;
dbms_output.put_line(v_cu.first_name||' '||v_cu.last_name||' earns '||v_cu.salary);
end loop;
close c;
end;
/
【问题讨论】: