0

誰かがOracleにネストされたテーブルオブジェクトが何であるかを説明できますか?システム間のインターフェースを構築しているときに、私にとって奇妙な列SYS_NC00054$が何であるかを発見しました。調査の結果、作成した関数ベースのインデックスからネストされたテーブルオブジェクトであることがわかりました。

4

2 に答える 2

1

基本的に、別のテーブル(または他の複合型)の形式でデータを格納する列を持つテーブル:別のテーブル内にネストされたテーブル。

http://www.databasejournal.com/features/oracle/article.php/3788331/So-what-is-an-Oracle-Nested-Table.htm

于 2010-02-05T15:23:42.153 に答える
1

関数ベースのインデックスは、ネストされたテーブルとは異なります。

通常のインデックスは実際の列に対して作成されます...

create index emp_job_idx on emp (job)
/

...一方、関数ベースのインデックスは、列に適用される関数に基づいて構築されます。たとえば、time要素なしで日付列をクエリするときに使用できるインデックス...

create index emp_hire_idx on emp(trunc(hiredate))
/

USER_IND_COLUMNSにクエリを実行すると、実際の列にインデックスを付けていないため、最初のケースではインデックス付きの列が表示されますが、2番目のケースでは表示されません。代わりに表示されるのは、システムで生成された「列」です。

SQL> select index_name, column_name
  2  from user_ind_columns
  3  where table_name = 'EMP'
  4  /

INDEX_NAME                     COLUMN_NAME
------------------------------ ---------------
PK_EMP                         EMPNO
EMP_UK                         ENAME
EMP_JOB_IDX                    JOB
EMP_HIRE_IDX                   SYS_NC00010$

SQL> 

USER_IND_EXPRESSIONS..でインデックスの構成を確認できます。

SQL> select index_name, column_expression
  2  from user_ind_expressions
  3  where table_name = 'EMP'
  4  /

INDEX_NAME                     COLUMN_EXPRESSION
------------------------------ --------------------
EMP_HIRE_IDC                   TRUNC("HIREDATE")

SQL>

ネストされたテーブル

ネストされたテーブルは、単純なタイプまたは複雑なタイプのユーザー定義の配列であるという点で異なります。これらを使用して、ORDBMS表のPL/SQLコレクションまたは列を定義できます。このような...

SQL> create or replace type address_t
  2      as object
  3      (
  4          address_line_1 varchar2(70)
  5          , address_line_2 varchar2(70)
  6          , address_line_3 varchar2(70)
  7          , address_line_4 varchar2(70)
  8          , address_line_5 varchar2(70)
  9          , postcode postcodestructure
 10      ) final;
 11  /
create or replace type address_t
*
ERROR at line 1:
ORA-02303: cannot drop or replace a type with type or table dependents


SQL>
SQL> create or replace type address_nt as table of address_t
  2  /

Type created.

SQL>
SQL> create table contact_details (
  2      person_id number not null
  3      , email_address varchar2(254)
  4      , addresses address_nt
  5      )
  6  nested table addresses store as nested_addresses
  7  /

Table created.

SQL>
于 2010-02-05T23:48:59.837 に答える