2013-11-11 3 views
0

При создании типа объекта можно ли объявить тип как TABLE.COLUMNNAME%TYPE?Тип Oracle объекта

например.

CREATE OR REPLACE TYPE PROJECT_TYPE IS OBJECT 
(
    project_id project.project_id%TYPE, 
    project_desc project.project_desc%TYPE 
); 

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

+0

table.column% type будет работать нормально после эффектов изменений операторов – SriniV

+0

@realspirituals Проблема заключается в том, что она выдает ошибку, когда 'table.column% type' предоставляется как тип данных. – user75ponic

+0

woops ... моя ошибка .. Я был слепой, когда читал ваш вопрос. – SriniV

ответ

1

Это, к сожалению, невозможно. Вы должны указать фактический тип, вы не можете ссылаться на столбец таблицы %TYPE.

Причина в том, что и %TYPE, и %ROWTYPE являются конструкциями PL/SQL, которые не поддерживаются в SQL.

+0

hmm! Так может ли это быть объявлено в пакете, и если его можно объявить в пакете, можно ли получить доступ к нему из Java, если я хочу передать массив из Java в процедуру? – user75ponic

+1

@Polppan Ну ... Я так не думаю, потому что и тип элементов типа TABLE, и сам тип TABLE должен быть объявлен на уровне _database_ (поэтому вы не можете использовать '% ROWTYPE' na'% TYPE'), который будет доступен на стороне Java через JDBC. Если вы объявите их в пакете, вы не сможете создавать дескрипторы 'STRUCT' и' ARRAY' на основе этих упакованных типов. –

+0

Спасибо и хорошо объяснил, оценил. – user75ponic

Смежные вопросы