【发布时间】:2017-12-07 09:56:14
【问题描述】:
SET SERVEROUTPUT ON;
DECLARE
type r05_id_type is TABLE of r01_table.R01_ID%TYPE;
r01_ids r05_id_type;
BEGIN
SELECT r1.r01_ID as R01_ID
BULK COLLECT INTO r01_ids
FROM r01_table r1, r05_table r5
WHERE r1.r01_ID= r5.r05_R01_ID_FK
AND r5.r05_status='D' AND r5.r05_date_time_captured <= TRUNC(SYSDATE) - 1095
AND r1.r01_id NOT IN(select r01.r01_ID
FROM r01_table r01, r05_table r05
WHERE r05.r05_status !='D'
AND r01.r01_ID= r05.r05_R01_ID_FK);
dbms_output.put_line(r01_ids.COUNT);
FOR indx IN 1 .. r01_ids.COUNT
LOOP
dbms_output.put_line(r01_ids(indx));
insert all into r01_table_archived (R01_ID_TYPE,R01_IDENTITY_NUMBER,R01_PASSPORT_COUNTRY,R01_DATE_TIME_CAPTURED)
values(rr1_R01_ID_TYPE,rr1_R01_IDENTITY_NUMBER,rr1_R01_PASSPORT_COUNTRY,rr1_R01_DATE_TIME_CAPTURED)
select rr1_R01_ID_TYPE,rr1_R01_IDENTITY_NUMBER,rr1_R01_PASSPORT_COUNTRY,rr1_R01_DATE_TIME_CAPTURED
FROM (SELECT R01_ID_TYPE,R01_IDENTITY_NUMBER,R01_PASSPORT_COUNTRY,R01_DATE_TIME_CAPTURED
FROM r01_table
WHERE r01_id IN (r01_ids));
END LOOP;
END;
我编写上述过程是为了检查两个表之间的一些记录并将匹配的 ID (r01_ID) 存储在内部表调用 r01_ids 中。
dbms_output.put_line(r01_ids(indx)) 打印正确的值,表明这些值正确插入到r01_ids。
但是当我尝试将值插入到 LOOP 中的 r01_table_archived 表时,就会出现问题。
我收到以下错误
PLS-00642:SQL 语句中不允许本地集合类型
我不能像这样从插入查询中获取r01_ids 的值吗?如果我错了,请有人帮我找出问题所在以及如何以正确的方式执行。
【问题讨论】:
标签: sql oracle stored-procedures plsql