2014-07-03 35 views
0

我有後續的結構爲我的Oracle數據庫11g R2的VARRAY:將數據插入裁判

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; 

我試圖執行INSERTselecoes,但我不知道我怎麼可以掛載帶有select語句的refListaJogadores列表。這裏就是我想現在:

INSERT INTO selecoes VALUES ('Brasil', 'America do Sul', (SELECT REF(e) FROM tecnicos e WHERE e.nacionalidade = 'Brasil'), ?????) 

我需要什麼,我需要把在該解決方案????使我的查詢正常工作。問題只出現在????上,因爲talbe tecnicos上的子查詢工作得很好。

我將不勝感激解決方案,可以解決問題使用子查詢和一些功能,創建一個列表REF's。這裏是工作ONLY一個解決方案,如果是的jogadores與給定nacionalidade只是1寄存器:

INSERT INTO selecoes VALUES ('Brasil', 'America do Sul', (SELECT REF(e) FROM tecnicos e WHERE e.nacionalidade = 'Brasil'), tListaJogadores((SELECT REF(j) FROM jogadores j WHERE j.nacionalidade = 'Brasil'))); 

回答

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') 
); 
+0

這正是我一直在尋找的。感謝您的時間;) – BigBlast

+0

很高興有幫助。 – nop77svk