在包中:ORA-00942 table 或视图不存在

In a package: ORA-00942 table or view does not exist

所以,我想我已经搜索了所有类似的帖子,但无法解决我的问题。

在 pkg 规范中,我声明:

TYPE record_type IS RECORD (Pat_Nbr VARCHAR2(4),
  Trt_Procedure VARCHAR2(5),
  Phys_ID VARCHAR2(3),
  Phys_Name VARCHAR2(20),
  Phys_Specialty VARCHAR2(18));
TYPE table_type IS TABLE OF record_type INDEX BY BINARY_INTEGER;
t_Pat_Trt table_type;
PROCEDURE BuildPatTbl
  (t_PatTrt OUT table_type,
  PatTblCount IN OUT NUMBER);

在正文中,我想做一个带有连接的简单 SELECT INTO。没有用,所以我尝试了所有这些(注意 3 次尝试 - 最后两次被注释掉),但我仍然收到 00942 错误。

PROCEDURE BuildPatTbl
  (t_PatTrt OUT table_type,
  PatTblCount IN OUT NUMBER)
IS
   CURSOR cur_tbl IS SELECT a.Pat_Nbr, a.Trt_Procedure, Phys_ID, b.Phys_Name, b.Phys_Specialty
                      FROM Treatment a INNER JOIN Physician b
                      USING (Phys_ID);
    temp_rec record_type;
BEGIN
  OPEN cur_tbl;
  LOOP 
    FETCH cur_tbl into temp_rec;
    EXIT WHEN cur_tbl %NOTFOUND;
    BEGIN
      INSERT INTO t_PatTrt VALUES (temp_rec);
    END;
  END LOOP;
  CLOSE cur_tbl;
  /*EXECUTE IMMEDIATE 'CREATE TABLE t_PatTrt 
  (Pat_Nbr VARCHAR2(4),
    Trt_Procedure VARCHAR2(5),
    Phys_ID VARCHAR2(3),
    Phys_Name VARCHAR2(20),
    Phys_Specialty VARCHAR2(18)))';*/
  /*FOR t_Pat_record IN cur_tbl LOOP
    INSERT INTO t_PatTrt VALUES t_Pat_record;
  END LOOP;*/
END BuildPatTbl;

有什么想法吗? 谢谢。

问题是您试图将集合视为数据库 table。那永远不会飞 - 它们是两个完全不同的东西。

为什么要 select 记录到数组中?您最终将如何处理这些结果?如果您要循环遍历并根据信息执行一些其他 DML,最好在单个 SQL 语句中完成整个操作。

如果您绝对必须将结果存储在一个集合中,请查看 bulk collect

首先,集合中不能直接插入,可以使用bulk collect into特性来实现

OPEN cur_tbl;
    FETCH cur_tbl bulk collect into t_Pat_Trt;

CLOSE cur_tbl;