1

通常のテーブル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、カウントから除外されます

4

1 に答える 1

4

作業しているオブジェクトを正確に定義するのに役立ちます...

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 でコレクションを定義する方がはるかに理にかなっています。

于 2012-04-17T20:03:21.983 に答える