Ссылка на подтип в Oracle - PullRequest
       5

Ссылка на подтип в Oracle

2 голосов
/ 14 декабря 2010

Пожалуйста, помогите, вопрос внизу.

CREATE OR REPLACE TYPE NameType AS OBJECT 
(firstName VARCHAR(20), middleName VARCHAR(20), lastName VARCHAR(20))
INSTANTIABLE
FINAL;

CREATE OR REPLACE TYPE ServicerType AS OBJECT 
(servicerID INTEGER, servicerType VARCHAR(10))
INSTANTIABLE
FINAL;

CREATE OR REPLACE TYPE PersonType AS OBJECT 
(personID INTEGER, name NameType, gender CHAR(1))
INSTANTIABLE
NOT FINAL;

CREATE OR REPLACE TYPE EmployeeType UNDER PersonType 
(servicerRef REF ServicerType)
NOT INSTANTIABLE
NOT FINAL;

CREATE OR REPLACE TYPE FullTimeEmployeeType UNDER EmployeeType 
(yearlySalary NUMBER(19,4))
INSTANTIABLE
FINAL;

CREATE TABLE Servicer OF ServicerType;
CREATE TABLE Person OF PersonType;

INSERT ALL
INTO Servicer values (ServicerType(100, 'Company')
SELECT * FROM dual

INSERT ALL
INTO Person VALUES (FullTimeEmployeeType(200, 
    NameType('Bob', 'T', 'Builder'), 'M', 
    (select ref(s) from servicer s where servicerid = 100), 56700))
SELECT * FROM dual

Теперь я хочу выполнить этот запрос:

select p.gender, p.name.firstName, p.name.lastName, p.yearlySalary from person p

Я получил ошибку. Я знаю, что yearSalary в FullTimeEmployee, который является подтипом человека, но я просто не знаю, как ссылаться на него.

1 Ответ

4 голосов
/ 14 декабря 2010

Вам нужна функция TREAT

select p.gender, p.name.firstName, p.name.lastName,
        treat(value(p) as FullTimeEmployeeType).yearlySalary
from person p
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...