Pergunta

Eu tenho as seguintes declarações no 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
)

Como posso selecionar o valor do nome para uma pessoa, ou seja,

SELECT somePeople(person(name)) FROM people

Obrigado

Foi útil?

Solução

Tenho certeza que:

  1. O que você está fazendo não é o que eu estaria fazendo. Ele meio que viola completamente os princípios relacionais, e você vai acabar com um sistema de objeto/tipo no Oracle que talvez não consiga mudar depois que ele for estabelecido. O melhor uso que eu já vi para os tipos SQL (não os tipos PL/SQL) é basicamente ser capaz de lançar um cursor de referência para funções de pipeline.

  2. Você precisa desnecessar a coleção antes de poder consultá -la relacionalmente, assim:

    Selecione o nome de (selecione sp.

Isso lhe dará todas as linhas, porque não há nada em suas especificações (como um atributo Person_id) para restringir as linhas.

O guia do desenvolvedor do Oracle Application - Recursos relacionais do objeto discute tudo isso em profundidade muito maior, com exemplos.

Outras dicas

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')  
           ) 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top