循环索引变量使用在PL / SQL集合中无效

时间:2015-01-30 11:46:13

标签: sql oracle plsql oracle11g

执行此操作后,我收到以下内容:

PL/SQL: ORA-00942: table or view does not exist
PLS-00364: loop index variable 'EMP_REC' use is invalid

据说:

  

在块或子程序中,当您输入块或子程序时,将实例化用户定义的记录。退出块子程序时,它们不再存在。“

现在我觉得我完全明白它在说什么,我想......但是,除此之外,是否我认为我的FOR部分正常工作?(为什么不是?),因为我可以看到,整个事情发生在街区而不是外面。因此,直到块的退出,我认为v_myrec默认存在于Oracle服务器分配的私有内存的缓存或缓冲区中,因为毕竟v_myrec是一个“表”可以这么说,因此DBMS包应该能够打印我的“emp_rec.v_sal ...”并在我的块执行成功完成后,那么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;

1 个答案:

答案 0 :(得分:2)

它们是单独的错误; PLS-00364: loop index variable 'EMP_REC' use is invalid是一个连锁错误,因为当您的光标声明为无效时,光标无效。{/ 1}}。

PL/SQL: ORA-00942: table or view does not exist不是一张桌子。如果它是SQL(模式级)集合类型而不是PL / SQL集合,则可以执行以下操作:

v_myrec

但它不是,所以你不能。即使在PL / SQL块中,也无法在纯SQL中引用PL / SQL集合。这甚至不是一个集合,它只是一个记录类型,所以无论如何,循环它并没有多大意义。