2013-10-12 4 views
0

Версия: Oracle 11g Database Express Edition Release 11.2.0.2.0 - ПроизводствоАннотация тип данных в Oracle 11g ORA-00904: недопустимый идентификатор

create type address_ty as object 
(street varchar2(50), 
city varchar2(50), 
state varchar2(25), 
postalcode integer); 

create or replace type person_ty as object 
(FullName varchar2(50), 
BirthDate date, 
Address address_ty, 
member function CalcAge (BirthDate in DATE) return number, 
PRAGMA RESTRICT_REFERENCES (CALCAGE, WNDS)); 

create or replace type body person_ty as 
member function CalcAge (BirthDate DATE) return number is 
begin 
    return round(sysdate - BirthDate); 
end; 
end; 
/

create table customer (customerId integer, 
        Person person_ty); 

describe customer; 

select attr_name, length, attr_type_name from user_type_attrs where type_name = 'PERSON_TY'; 

select attr_name, length, attr_type_name from user_type_attrs where type_name = 'ADDRESS_TY'; 

insert into customer values (1, person_ty('ABC', '01-JAN-95', address_ty('MG Road', 'Bangalore', 'KA', 560001))); 

select person.FullName from customer; 

выше оператор выводит ошибку - ORA-00904: «ПЕРСОНА "." FULLNAME ": неверный идентификатор

Как устранить эту ошибку?

Благодаря

ответ

0

Я считаю, что вам нужно, чтобы квалифицировать колонку таблицы, поэтому он не пытается интерпретировать person как имя таблицы; и он должен быть псевдоним (не совсем уверен, почему):

select c.person.FullName from customer c; 

SQL Fiddle.

+0

Спасибо Алекс. Ваше решение работает. – user2873700

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