誰かがOracleにネストされたテーブルオブジェクトが何であるかを説明できますか?システム間のインターフェースを構築しているときに、私にとって奇妙な列SYS_NC00054$が何であるかを発見しました。調査の結果、作成した関数ベースのインデックスからネストされたテーブルオブジェクトであることがわかりました。
4463 次
2 に答える
1
基本的に、別のテーブル(または他の複合型)の形式でデータを格納する列を持つテーブル:別のテーブル内にネストされたテーブル。
于 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 に答える