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
La solution
Je suis assez sûr que:
-
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.
-
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')
)