2010-02-05 2 views
0

Может кто-нибудь объяснить, какие вложенные объекты таблицы находятся в Oracle? При построении интерфейса между системами я обнаружил, что было для меня нечетным столбцом SYS_NC00054 $. После некоторого исследования я обнаружил, что он был вложенным объектом таблицы из созданного мной индекса функции.Что такое вложенные объекты таблицы в Oracle?

ответ

1

функции на основе индексов отличаются от вложенных таблиц.

регулярный индекс построен на реальные колонны ...

create index emp_job_idx on emp (job) 
/

... в то время как индекс функции на основе строится на функциях, применяемых к колоннам. Например, мы могли бы, что индекс можно использовать, когда мы запрашиваем столбец даты без времени элемента ...

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

Когда мы запрашиваем USER_IND_COLUMNS, индексированный столбец показывает в первом случае, но не во втором, потому что мы не индексируем фактический столбец. То, что мы видим вместо этого система создается «столбец» ....

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> 

Вложенные таблицы

Вложенные таблицы - это нечто другое: они представляют собой определяемые пользователем массивы простых или сложных типов. Они могут использоваться для определения коллекций или столбцов PL/SQL в таблице ORDBMS. Подобно этому ...

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> 
Смежные вопросы