Plsql 如何批量收集到子查询中UDT所在的类型中

Plsql 如何批量收集到子查询中UDT所在的类型中,plsql,subquery,oracle12c,user-defined-types,bulk-collect,Plsql,Subquery,Oracle12c,User Defined Types,Bulk Collect,我正在尝试创建一个值集合,我计划对其运行FORALL DELETE FROM[table]。 当我在子查询中有一个UDT时,似乎没有任何东西被批量收集到集合中 这似乎不起作用 SELECT ATTR1 BULK COLLECT INTO tmpTBL1 FROM Table1 WHERE ATTR1 NOT IN (SELECT ATTR1 FROM TABLE(tmpPList)); --99% sure problem is here. 还确认了对象类型中的列大小与Person表中的列大小

我正在尝试创建一个值集合,我计划对其运行FORALL DELETE FROM[table]。 当我在子查询中有一个UDT时,似乎没有任何东西被批量收集到集合中

这似乎不起作用

SELECT ATTR1
BULK COLLECT INTO tmpTBL1
FROM Table1
WHERE ATTR1 NOT IN (SELECT ATTR1 FROM TABLE(tmpPList)); --99% sure problem is here.
还确认了对象类型中的列大小与Person表中的列大小相同。(我认为填充可能是个问题。)

对象类型

收集类型

存储过程

模拟表数据

tmpPList 
 __________________________________________
|__attr1__||__attr2__||__attr3__||__attr4__|
   jdoe       John       Doe        abcd
   fmac      Frank       Mac        efgh
   wgab      Wayne       Gab        ijkl

Table1
 __________________________________________
|__attr1__||__attr2__||__attr3__||__attr4__|
   jdoe       John       Doe        abcd
   fmac       Frank      Mac        efgh
   wgab       Wayne      Gab        ijkl
   mkell      Mike       Kell       mnop

Table2
 __________________________________________
|__attr1__||__attr2__||__attr3__||__attr4__|
   mdoe       Mary       Doe        abcd
   jmac       John       Mac        efgh
   mgab       Mitch      Gab        ijkl
   mkell      Mike       Kell       mnop

tmpTBL1
 _________
|__attr1__|
  mkell

Collection1
 __________________________________________
|__attr1__||__attr2__||__attr3__||__attr4__|
   mkell      Mike       Kell       mnop

Before delete - Person
 __________________________________________
|__attr1__||__attr2__||__attr3__||__attr4__|
   jdoe       John       Doe        abcd
   fmac       Frank      Mac        efgh
   wgab       Wayne      Gab        ijkl
   mkell      Mike       Kell       mnop

After delete - Person
 __________________________________________
|__attr1__||__attr2__||__attr3__||__attr4__|
   jdoe       John       Doe        abcd
   fmac       Frank      Mac        efgh
   wgab       Wayne      Gab        ijkl
当我使用表(tmpPList)时,tmpTBL1不会被值填充。 我希望有记录从个人身上删除。 正在尝试查找亲自存在但在tmpPList中不存在的ATTR1

更新: 使用:Oracle Database 12c Enterprise Edition 12.1.0.2.0版-64位

我的问题不在这里

SELECT ATTR1
BULK COLLECT INTO tmpTBL1
FROM Table1
WHERE ATTR1 NOT IN (SELECT ATTR1 FROM TABLE(tmpPList));
而是在这里。不需要整个for循环,没有它FORALL语句也可以正常工作

FOR indx IN 1 .. tmpTBL1.COUNT
LOOP
    Collection1(Collection1.COUNT + 1) := tmpPList(indx); 
END LOOP;
我的问题不在这里

SELECT ATTR1
BULK COLLECT INTO tmpTBL1
FROM Table1
WHERE ATTR1 NOT IN (SELECT ATTR1 FROM TABLE(tmpPList));
而是在这里。不需要整个for循环,没有它FORALL语句也可以正常工作

FOR indx IN 1 .. tmpTBL1.COUNT
LOOP
    Collection1(Collection1.COUNT + 1) := tmpPList(indx); 
END LOOP;
FOR indx IN 1 .. tmpTBL1.COUNT
LOOP
    Collection1(Collection1.COUNT + 1) := tmpPList(indx); 
END LOOP;