Вопрос

У меня есть следующие инструкции в Oracle 11g:

CREATE TYPE person AS OBJECT (
    name VARCHAR2(10),
    age NUMBER
);

CREATE TYPE person_varray AS VARRAY(5) OF person;

CREATE TABLE people (
    somePeople person_varray
)

Как я могу выбрать значение имени для человека, т.е.

SELECT somePeople(person(name)) FROM people

Спасибо

Это было полезно?

Решение

Я почти уверен, что:

  1. То, что ты делаешь, - это не то, что делал бы я.Это как бы полностью нарушает принципы отношений, и в конечном итоге вы получите систему объектов / типов в Oracle, которую вы, возможно, не сможете изменить, как только она будет установлена.Лучшее применение, которое я видел для типов SQL (не типов PL / SQL), - это, по сути, возможность возвращать курсор ref обратно для конвейерных функций.

  2. Вам нужно отменить проверку коллекции, прежде чем вы сможете запросить ее реляционно, вот так:

    ВЫБЕРИТЕ ИМЯ Из (ВЫБЕРИТЕ SP.* ИЗ PEOPLE P, ТАБЛИЦА (P.SOME_PEOPLE) SP)

Это даст вам все строки, потому что в ваших спецификациях (например, атрибуте PERSON_ID) нет ничего, что ограничивало бы строки.

В Руководстве Oracle Application Developer's Guide - Object Relational Features все это обсуждается гораздо более подробно с примерами.

Другие советы

To insert query:-

insert into people values (
person_varray(person('Ram','24'))
);

To select :-

select * from people;

SELECT NAME FROM (SELECT SP.* FROM PEOPLE P, TABLE(P.somePeople) SP)

While inserting a row into people table use constructor of 
person_varray and then the constructor 
of person type for each project.
The above INSERT command 
creates a single row in people table.

 select somePeople from people ;

 person(NAME, age) 
---------------------------------------------------
person_varray(person('Ram', 1), 

To update the  query will be:-

update people 
set somePeople =  
           person_varray 
           (  
               person('SaAM','23')  
           ) 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top