Как создать тип Oracle, который ссылается на столбцы таблицы для типа данных? - PullRequest
9 голосов
/ 09 марта 2012

Я пытаюсь определить type, используя следующий код.

CREATE OR REPLACE TYPE MY_TYPE AS OBJECT (
    app_id        some_table_name.app_id%type
);

Если я запускаю это, я получаю ошибку.

Error(4,32): PLS-00201: identifier 'some_table_name.app_id' must be declared

Что с этим не так?

Ответы [ 2 ]

19 голосов
/ 09 марта 2012

Что плохого в том, что %type - это синтаксис PL / SQL.Это не поддерживается в SQL.

Я согласен, что это позор, и было бы очень здорово, если бы мы могли ссылаться на столбцы таблицы в объявлениях типа, как это.К сожалению, Oracle действительно замедлил изменения в своей реализации TYPE за последние пару версий, поэтому я думаю, что вряд ли это изменится в ближайшем будущем.чтобы увидеть, поддерживает ли Oracle этот синтаксис:

CREATE OR REPLACE TYPE MY_TYPE AS OBJECT 
      (     one_row        some_table_name.%rowtype ); 

Динамические объекты для интерфейсов: насколько круто это будет?

4 голосов
/ 09 марта 2012

Вы не можете использовать some_table_name.app_id%type при объявлении типа в базе данных, больше, чем вы можете сделать это:

create table emp (empno number,
                  deptno dept.deptnp%type, -- NOT ALLOWED
                 );

Вы должны использовать любой встроенный тип, такой как NUMBER, VARCHAR2 (10) или пользовательский тип, такой как mytype

...