Oracle 11g VARRAY de OBJETOS
Pregunta
Tengo las siguientes declaraciones en 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
)
¿Cómo puedo seleccionar el valor del nombre de una persona, es decir
SELECT somePeople(person(name)) FROM people
Gracias
Solución
Estoy bastante seguro de que:
-
Lo que está haciendo no es lo que estaría haciendo. Viola el tipo de principios completamente relacionales, y usted va a terminar con un sistema de objetos / Tipo de Oracle que puede que no sea capaz de cambiar una vez que se ha establecido. El mejor uso que he visto para este tipo SQL (no pl tipos / SQL) es, básicamente, siendo capaz de lanzar un cursor ref vuelta para las funciones pipeline.
-
Hay que UNNEST la colección antes de que pueda consultarlo relacional, así:
SELECT NOMBRE DE (SELECCIONAR SP. * De personas P, mesa (P.SOME_PEOPLE) SP)
que usted va a dar todas las filas, porque no hay nada en sus especificaciones (como un atributo person_id) para restringir las filas.
La Guía del Desarrollador de aplicaciones Oracle - Objeto Características relacionales discute todo esto con mucha mayor profundidad, con ejemplos
.Otros consejos
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')
)