我的oracle数据库11g R2具有以下结构:
CREATE TYPE tPessoa AS OBJECT (nome VARCHAR(20), sobrenome VARCHAR(20), idade INTEGER, nacionalidade VARCHAR(20)) NOT FINAL;
CREATE TYPE tTecnico UNDER tPessoa (nTitulos INTEGER);
CREATE TYPE tJogador UNDER tPessoa (posicao VARCHAR(10), numero INTEGER);
CREATE TYPE tListaJogadores IS VARRAY(23) OF REF tJogador;
CREATE TYPE tSelecao AS OBJECT (pais VARCHAR(20), continente VARCHAR(20), tecnico REF tTecnico, jogadores tListaJogadores);
CREATE TABLE jogadores OF tJogador;
CREATE TABLE tecnicos OF tTecnico;
CREATE TABLE selecoes OF tSelecao;
我正在尝试对表INSERT
执行selecoes
,但我没有意识到如何使用select语句安装ref tListaJogadores列表。以下是我现在正在尝试的内容:
INSERT INTO selecoes VALUES ('Brasil', 'America do Sul', (SELECT REF(e) FROM tecnicos e WHERE e.nacionalidade = 'Brasil'), ?????)
我需要解决方案,我需要放在那个????使我的查询正常。问题仅出在此????
上,因为talbe tecnicos
上的子查询工作正常。
我希望使用子查询和一些创建REF's
列表的函数来解决问题的解决方案。如果jogadores
的{{1}}只有 1个注册,那么这个解决方案只能 ONLY :
nacionalidade
答案 0 :(得分:1)
这会满足您的需求吗?
INSERT INTO selecoes (pais, continente, tecnico, jogadores)
VALUES ('Brasil', 'America do Sul',
(SELECT REF(e) FROM tecnicos e WHERE e.nacionalidade = 'Brasil'),
(SELECT CAST(COLLECT(REF(j)) AS tListaJogadores) FROM jogadores j WHERE j.nacionalidade = 'Brasil')
);