Estou com um problema ao inserir em uma tabela aninhada no oracle
Estes são os tipos e tabelas relevantes;
create type movies_type as Table of ref movie_type;
create type actor_type under person_type
(
starring movies_type
) Final;
create table actor of actor_type
NESTED TABLE starring STORE AS starring_nt;
foi assim que tentei inserir
insert into actor values
(actor_type(29,'Carrie','Fisher',TO_DATE('21/10/1956', 'DD/MM/YY'),TO_DATE('27/12/2016', 'DD/MM/YY'),'USA', movies_type(select ref(m) from movie m where movie_id in (7, 8, 9))));
isso não funciona, dá
SQL Error: ORA-00936: missing expression
o que não é muito útil.
eu também tentei aninhar a instrução select entre parênteses porque pensei que poderia ter sido um erro de sintaxe
insert into actor values
(actor_type(29,'Carrie','Fisher',TO_DATE('21/10/1956', 'DD/MM/YY'),TO_DATE('27/12/2016', 'DD/MM/YY'),'USA', movies_type((select ref(m) from movie m where movie_id in (7, 8, 9)))));
mas disse
SQL ERROR ORA-01427: single-row subquery returns more than one row
então eu mudei para isso
insert into actor values
(actor_type(29,'Carrie','Fisher',TO_DATE('21/10/1956', 'DD/MM/YY'),TO_DATE('27/12/2016', 'DD/MM/YY'),'USA', movies_type((select ref(m) from movie m where movie_id=7))));
que funcionou, mas não é o que eu quero, pois não me permite ter vários valores em
movies_type
eu não entendo qual é o problema exatamente e as mensagens de erro não são úteis
por que diz expressão ausente?
e por que no segundo caso dá sub-consulta de linha única retorna mais de uma linha?
Muito obrigado.
Atualização: aqui está o tipo movie_type e table movie:
create type movie_type as Object
(
MOVIE_ID NUMBER(15),
TITLE VARCHAR(50) ,
GENRE VARCHAR(30),
RELEASE_DATE DATE,
RUNNING_TIME NUMBER,
BUDGET NUMBER
) Final;
criação da tabela:
create table MOVIE of movie_type;
ALTER TABLE MOVIE
ADD CONSTRAINT PK_MOVIE_ID PRIMARY KEY (MOVIE_ID);
ALTER TABLE MOVIE modify TITLE not null;
inserções relevantes no filme:
INSERT INTO MOVIE (MOVIE_ID, TITLE, GENDER, RELEASE_DATE, RUNNING_TIME, BUDGET) VALUES (7,'Star Wars','epic space opera',TO_DATE('25/05/1977', 'DD/MM/YY'),121,11000000);
INSERT INTO MOVIE (MOVIE_ID, TITLE, GENDER, RELEASE_DATE, RUNNING_TIME, BUDGET) VALUES (8,'The Empire Strikes Back','epic space opera',TO_DATE('17/05/1980', 'DD/MM/YY'),124,18000000);
INSERT INTO MOVIE (MOVIE_ID, TITLE, GENDER, RELEASE_DATE, RUNNING_TIME, BUDGET) VALUES (9,'Return of the Jedi','epic space opera',TO_DATE('25/05/1983', 'DD/MM/YY'),132,32500000);