PL/SQL 集合中的循环索引变量使用无效
Loop index variable use is invalid in PL/SQL Collections
执行此操作后,我收到以下信息:
PL/SQL: ORA-00942: table or view does not exist
PLS-00364: loop index variable 'EMP_REC' use is invalid
据说:
In a block or subprogram, user-defined records are instantiated when you enter the block or Subprogram. They cease to exist when you exit the block Subprogram."
现在我想我完全理解它在说什么,我想...但是除了上面所说的,我的 FOR 部分应该工作正常吗?(为什么不是?),因为我可以看,整个事情都发生在街区而不是外面。所以直到块的出口,我假设 v_myrec 存在于默认情况下由 Oracle 服务器分配的私有内存的缓存或缓冲区中,因为毕竟 v_myrec 是 "table" 所以说话,因此 DBMS 包应该能够打印我的 "emp_rec.v_sal..." 并且在我的块执行成功完成后,THEN v_myrec 不复存在。我在这里有点困惑,有人可以向我解释一下吗?
如果我说错了请指正。 v
DECLARE
TYPE t_rec IS RECORD
(v_sal NUMBER(8) NOT NULL := 0,
v_min_sal NUMBER(8) DEFAULT 1000,
v_hire_date employees.hire_date%TYPE,
v_rec1 employees%ROWTYPE);
v_myrec t_rec;
BEGIN
v_myrec.v_sal := v_myrec.v_min_sal + 500;
v_myrec.v_hire_date := SYSDATE;
SELECT *
INTO v_myrec.v_rec1
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE(v_myrec.v_rec1.last_name||' '||v_myrec.v_sal||
' '||v_myrec.v_rec1.salary);
FOR emp_rec IN (SELECT *
FROM v_myrec)
LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.v_sal,...,...);
END LOOP;
END;
它们是不同的错误; PLS-00364: loop index variable 'EMP_REC' use is invalid
是您的光标在声明时无效的连锁错误,它会得到 PL/SQL: ORA-00942: table or view does not exist
.
v_myrec
不是 table。如果它是 SQL(架构级别)集合类型而不是 PL/SQL 集合,您可以这样做:
FOR emp_rec IN (SELECT * FROM TABLE(v_myrec))
但事实并非如此,所以你不能。您不能在 SQL 中引用 PL/SQL 集合,即使在 PL/SQL 块中也是如此。这甚至不是一个集合,它只是一个单一的记录类型,所以循环遍历它并没有多大意义。
执行此操作后,我收到以下信息:
PL/SQL: ORA-00942: table or view does not exist
PLS-00364: loop index variable 'EMP_REC' use is invalid
据说:
In a block or subprogram, user-defined records are instantiated when you enter the block or Subprogram. They cease to exist when you exit the block Subprogram."
现在我想我完全理解它在说什么,我想...但是除了上面所说的,我的 FOR 部分应该工作正常吗?(为什么不是?),因为我可以看,整个事情都发生在街区而不是外面。所以直到块的出口,我假设 v_myrec 存在于默认情况下由 Oracle 服务器分配的私有内存的缓存或缓冲区中,因为毕竟 v_myrec 是 "table" 所以说话,因此 DBMS 包应该能够打印我的 "emp_rec.v_sal..." 并且在我的块执行成功完成后,THEN v_myrec 不复存在。我在这里有点困惑,有人可以向我解释一下吗?
如果我说错了请指正。 v
DECLARE
TYPE t_rec IS RECORD
(v_sal NUMBER(8) NOT NULL := 0,
v_min_sal NUMBER(8) DEFAULT 1000,
v_hire_date employees.hire_date%TYPE,
v_rec1 employees%ROWTYPE);
v_myrec t_rec;
BEGIN
v_myrec.v_sal := v_myrec.v_min_sal + 500;
v_myrec.v_hire_date := SYSDATE;
SELECT *
INTO v_myrec.v_rec1
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE(v_myrec.v_rec1.last_name||' '||v_myrec.v_sal||
' '||v_myrec.v_rec1.salary);
FOR emp_rec IN (SELECT *
FROM v_myrec)
LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.v_sal,...,...);
END LOOP;
END;
它们是不同的错误; PLS-00364: loop index variable 'EMP_REC' use is invalid
是您的光标在声明时无效的连锁错误,它会得到 PL/SQL: ORA-00942: table or view does not exist
.
v_myrec
不是 table。如果它是 SQL(架构级别)集合类型而不是 PL/SQL 集合,您可以这样做:
FOR emp_rec IN (SELECT * FROM TABLE(v_myrec))
但事实并非如此,所以你不能。您不能在 SQL 中引用 PL/SQL 集合,即使在 PL/SQL 块中也是如此。这甚至不是一个集合,它只是一个单一的记录类型,所以循环遍历它并没有多大意义。