Question

Je les instructions suivantes dans 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
)

Comment puis-je sélectionner la valeur de nom pour une personne à savoir

SELECT somePeople(person(name)) FROM people

Merci

Était-ce utile?

La solution

Je suis assez sûr que:

  1. Qu'est-ce que vous faites est pas ce que je ferais. Il sorte de viole complètement les principes relationnels, et vous allez finir avec un système objet / type dans Oracle que vous pourriez ne pas être en mesure de changer une fois qu'il a été établi. Le meilleur usage que je l'ai vu pour SQL TYPEs (non PL / SQL types) est essentiellement d'être capable de jeter un curseur ref arrière pour les fonctions canalisées.

  2. Vous devez unnest la collection avant de pouvoir l'interroger relationnellement, comme suit:

    SELECT NOM DE (SELECT SP. * FROM PERSONNES P, TABLE (P.SOME_PEOPLE) SP)

Cela vous donnera toutes les lignes, parce qu'il n'y a rien dans votre cahier des charges (comme un attribut person_id) pour limiter les lignes.

Le Guide du développeur Oracle Application - Object Caractéristiques Relational traite tout cela beaucoup plus en profondeur, avec des exemples

.

Autres conseils

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')  
           ) 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top