【问题标题】:Loop index variable use is invalid in PL/SQL Collections循环索引变量使用在 PL/SQL 集合中无效
【发布时间】:2023-04-07 22:49:01
【问题描述】:

执行此操作后,我收到以下信息:

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;

【问题讨论】:

标签: sql oracle plsql oracle11g


【解决方案1】:

它们是单独的错误; PLS-00364: loop index variable 'EMP_REC' use is invalid 是一个连锁错误,因为你的光标在声明时无效,它得到PL/SQL: ORA-00942: table or view does not exist

v_myrec 不是表格。如果它是 SQL(模式级)集合类型而不是 PL/SQL 集合,您可以这样做:

FOR emp_rec IN (SELECT * FROM TABLE(v_myrec))

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

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2021-06-02
    相关资源
    最近更新 更多