这将有助于准确定义您正在使用的对象......
您有一个包含 5 行数据的表
SQL> create table foo(
2 id number,
3 status varchar2(10)
4 );
Table created.
SQL> insert into foo values( 1, 'open' );
1 row created.
SQL> insert into foo values( 2, 'close' );
1 row created.
SQL> insert into foo values( 3, 'open' );
1 row created.
SQL> insert into foo values( 4, 'open' );
1 row created.
SQL> insert into foo values( 5, 'close' );
1 row created.
但是你的嵌套表是如何定义的呢?它是在 SQL 还是 PL/SQL 中定义的?您使用的是 SQL 还是 PL/SQL 中的对象?
如果你已经在 SQL 中定义了嵌套表
SQL> create type foo_obj is object (
2 id number,
3 status varchar2(10)
4 );
5 /
Type created.
SQL> create type foo_nt
2 as table of foo_obj;
3 /
Type created.
并且您正在使用 PL/SQL 中的嵌套表,您可以使用TABLE
运算符
SQL> ed
Wrote file afiedt.buf
1 declare
2 l_foos foo_nt := new foo_nt();
3 begin
4 l_foos.extend(4);
5 l_foos(1) := new foo_obj( 1, 'ANC' );
6 l_foos(2) := new foo_obj( 2, 'pqr' );
7 l_foos(3) := new foo_obj( 3, 'ANCF' );
8 l_foos(4) := new foo_obj( 4, 'ANCF' );
9 for x in (select t.status, count(*) cnt
10 from foo t,
11 table( l_foos ) l
12 where t.id = l.id
13 group by t.status)
14 loop
15 dbms_output.put_line( x.status || ' ' || x.cnt );
16 end loop;
17* end;
SQL> /
close 1
open 3
PL/SQL procedure successfully completed.
那是你要找的吗?或者你有不同的设置?
如果您在 PL/SQL 中定义本地集合,您将无法在 SQL 语句中使用该集合,因为 SQL 引擎无法访问有关集合类型的任何信息。如果你想在 SQL 中使用集合,那么在 SQL 中定义集合会更有意义。