Соедините вложенную таблицу и обычную таблицу, чтобы получить результат
У меня нормальный стол temp
и вложенный стол temp_nt
Temp
-------------
ID Status
-------------
1 open
2 close
3 open
4 open
5 close
---------------
Предположим, что моя вложенная таблица имеет список ID, X
Допустим, данные во вложенной таблице похожи
temp_nt(1).ID=1 temp_nt(1).X='ANC'
temp_nt(2).ID=2 temp_nt(2).X='pqr'
temp_nt(3).ID=3 temp_nt(3).X='ANCF'
temp_nt(4).ID=4 temp_nt(4).X='ANCF'
Можно ли объединить оба, чтобы получить данные, как показано ниже,
Status COUNT
-----------------------
open 3
close 1
-----------------------
поскольку ID=5
отсутствует во вложенной таблице, поэтому исключается из подсчета
1 ответ
Это поможет точно определить, с какими объектами вы работаете...
У вас есть таблица с 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.