Что такое вложенные табличные объекты в Oracle? - PullRequest
0 голосов
/ 05 февраля 2010

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

Ответы [ 2 ]

1 голос
/ 06 февраля 2010

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

Обычный индекс строится по фактическим столбцам ...

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>
1 голос
/ 05 февраля 2010

По сути, таблица, в которой есть столбец, в котором хранятся данные в форме другой таблицы (или другого сложного типа): таблица, вложенная в другую.

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

...