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

时间:2015-05-12 13:26:54

标签: oracle plsql datatable package oracle-sqldeveloper

所以,我想我已经搜索过所有相似的帖子而无法解决我的问题。

在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;

有什么想法吗? 谢谢。

2 个答案:

答案 0 :(得分:2)

首先,在集合中无法直接插入,您可以使用批量收集功能来实现此功能

OPEN cur_tbl;
    FETCH cur_tbl bulk collect into t_Pat_Trt;

CLOSE cur_tbl;

答案 1 :(得分:0)

问题是您正在尝试将集合视为数据库表。这永远不会飞 - 它们是两个完全不同的东西。

为什么要在阵列中选择记录?你最终会对结果做些什么?如果您要根据信息循环并执行其他DML,那么最好在单个SQL语句中完成整个操作。

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