所以,我想我已经搜索过所有相似的帖子而无法解决我的问题。
在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;
有什么想法吗? 谢谢。
答案 0 :(得分:2)
首先,在集合中无法直接插入,您可以使用批量收集功能来实现此功能
OPEN cur_tbl;
FETCH cur_tbl bulk collect into t_Pat_Trt;
CLOSE cur_tbl;
答案 1 :(得分:0)
问题是您正在尝试将集合视为数据库表。这永远不会飞 - 它们是两个完全不同的东西。
为什么要在阵列中选择记录?你最终会对结果做些什么?如果您要根据信息循环并执行其他DML,那么最好在单个SQL语句中完成整个操作。
如果您绝对必须将结果存储在集合中,请查看bulk collect