43
I I II II Oracle 9i Oracle 9i Coleções Coleções

III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Embed Size (px)

Citation preview

Page 1: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

IIII II – – Oracle 9iOracle 9iIIII II – – Oracle 9iOracle 9i

ColeçõesColeções

Page 2: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Introdução• Coleção: formada de objetos do mesmo tipo,

cada um com um índice (posição) único dentro da coleção– NESTED TABLE

• Nested Tables– VARRAY

• Nested Tables x VARRAYs– VARRAYS são densos; NESTED TABLES podem ser

esparsas– VARRAYS: pequenas coleções; NESTED TABLES:

grandes coleções, ou coleções com tamanho indefinido

Page 3: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Definindo Coleções Locais

Nested Table:TYPE tipo IS TABLE OF tipo_elemento

[NOT NULL];

VARRAY:TYPE tipo IS VARRAY (tamanho_máximo)

OF tipo_elemento [NOT NULL];

Page 4: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Definindo Coleções Locais - Exemplos

DECLARE TYPE Calendar IS VARRAY(366) OF DATE;

TYPE ListaNomes IS TABLE OF VARCHAR2(30);

TYPE ListaEmp IS TABLE OF emp.nome%TYPE;

TYPE Item IS RECORD (codigo VARCHAR2(20),quantidade INTEGER);

TYPE Estoque IS VARRAY(250) OF Item;

TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE;

Page 5: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Definindo Coleções de BD

CREATE TYPE ListaCursos AS TABLE OF VARCHAR2(10)/CREATE TYPE Estudante AS OBJECT ( -- create object

id_num INTEGER(4),nome VARCHAR2(25),endereço VARCHAR2(35),cursos ListaCursos)

/

CREATE TABLE Estudante_tab OF EstudanteNESTED TABLE cursos STORE AS cursos_tab

/

Page 6: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Definindo Coleções de BD (2)

CREATE TYPE Projeto AS OBJECT(id_projeto NUMBER(2),titulo VARCHAR2(35),custo NUMBER(7,2))

/

CREATE TYPE ListaProjetos AS VARRAY(50) OF Projeto/

CREATE TABLE departamento (dept_id NUMBER(2),nome VARCHAR2(15),orcamento NUMBER(11,2),projetos ListaProjetos)

/

Page 7: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Coleções e Procedures (Funções)

TYPE Equipe IS TABLE OF Empregado;...PROCEDURE premia (membros IN Equipe);

DECLARETYPE EquipeVenda IS VARRAY(25) OF Vendedor;FUNCTION melhores_vendedores (n INTEGER) RETURN EquipeVenda IS ...

Page 8: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Iniciando ColeçõesDECLARE

meus_cursos ListaCursos;BEGIN

meus_cursos := ListaCursos(’Econ 2010’, ’Mat 3401’, ’Geren 3100’,’Hist 3141’, ’Mark 3312’, ’Ingl 2005’);

...END;

Exercício: coleção em que o tipo de cada elemento é REF;

DECLAREconjunto_projetos ListaProjetos;

BEGINconjunto_projetos :=

ListaProjetos(Projeto(1, ’Gerar Novo Relatório’, 3250), Projeto(2, ’Conferir Folha Pagamento’, 12350), Projeto(3, ’Checar Credores’, 1425));

...END;

Page 9: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Iniciando Coleções (2)DECLARE

TYPE Clientela IS VARRAY(100) OF Cliente;vips Clientela := Clientela(); /* coleção vazia <> coleção nula (ou não iniciada) */

BEGINIF vips IS NOT NULL THEN /* verdade */...END IF;

END;

Page 10: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Iniciando Coleções (3)BEGIN

INSERT INTO novatosVALUES (Estudante(5035, ’Janet Alvarez’, ’122

Broad St’, ’FT’, ListaCursos(’Econ 2010’, ’Acct 3401’, ’Mgmt 3100’, ...)));

Page 11: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Referenciando Elementos de Coleções

DECLARETYPE Nomes IS TABLE OF VARCHAR2(15);nomes Nomes := Nomes(’J Hamil’, ’D Caruso’, ’R Singh’, ...);i BINARY_INTEGER;

BEGIN...IF nomes(i) = ’J Hamil’ THEN...END IF;

END;

Page 12: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Referenciando Elementos de Coleções

(2)DECLARE

TYPE Nomes IS TABLE OF VARCHAR2(15);nomes Nomes := Nomes(’J Hamil’, ’D Piro’, ’R Singh’, ...);i BINARY_INTEGER;

BEGIN...verify_nome(nomes(i)); -- call procedure

Page 13: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Referenciando Elementos de Coleções

(3)DECLARE

TYPE Equipe IS VARRAY(20) OF Empregado;FUNCTION novo_contratado (data_contrato DATE) RETURN Equipe IS ...

BEGINstaffer := novo_contratado(’16-OCT-96’)(3);...

END;

Page 14: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Atribuindo ColeçõesDECLARE

TYPE Clientela IS VARRAY(100) OF Cliente;TYPE Vips IS VARRAY(100) OF Cliente;grupo1 Clientela := Clientela(...);grupo2 Clientela := Clientela(...);grupo3 Clientela; /* Atomicamente nula */grupo4 Vips := Vips(...);

BEGINgrupo2 := grupo1; grupo1 := NULL;grupo3 := grupo2; /* Erro de compilação: por quê? */

Page 15: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Atribuindo Elementos de Coleções

DECLARETYPE NumList IS TABLE OF INTEGER;nums NumList;

BEGINnums(1) := 10; -- COLLECTION_IS_NULL: ERROR!nums := NumList(10,20,30);nums(1) := ASCII(’A’);nums(2) := 10 * nums(1);nums(’B’) := 15; -- VALUE_ERRORnums(4) := 40; -- SUBSCRIPT_BEYOND_COUNT

END;

Page 16: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Comparando ColeçõesDECLARE

TYPE Clientela IS TABLE OF Cliente;grupo1 Clientela := Clientela(...);grupo2 Clientela := Clientela(...);grupo3 Clientela;

BEGIN...IF grupo1 = grupo2 THEN -- erro de compilação...END IF;IF grupo3 IS NULL THEN ...…END IF;

END;

Page 17: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções - Nested Tables

SQL> CREATE TYPE Curso AS OBJECT (2 n_curso NUMBER(4),3 titulo VARCHAR2(35),4 creditos NUMBER(1));

SQL> CREATE TYPE ListaCursos AS TABLE OF Curso;

SQL> CREATE TABLE departamento (2 nome VARCHAR2(20),3 diretor VARCHAR2(20),4 secretaria VARCHAR2(20),5 cursos ListaCursos)6 NESTED TABLE cursos STORE AS cursos_tab;

Page 18: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções - Nested Tables (2)

BEGININSERT INTO departamento

VALUES(’Psicologia’, ’Irene Santos’, ’R. 1o. Maio 133’,ListaCursos(Curso(1000, ’ Psicologia Gerak’, 5),Curso(2100, ’Psicologia Experimental’, 4),Curso(4410, ’Psicologia Especial’, 4)));

INSERT INTO departamentoVALUES(’Línguas’, ’Mara Silva’, ’R. 7 de Setembro 205’,

ListaCursos(Curso(1002, ’Escrita Oficial’, 3),Curso(2020, ’Literatura e Cinema’, 4),Curso(2418, ’Ficção Científica Moderna’, 3),Curso(3870, ’Contos’, 5)));

END;

Page 19: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções - Nested Tables (3)

DECLAREnovos_cursos ListaCursos :=

ListaCursos(Curso(1002, ’Escrita Oficial’, 3),Curso(2020, ’Literatura e Cinema’, 4),Curso(4725, Português Instrumental’, 5));

BEGINUPDATE departamento

SET cursos = novos_cursos WHERE nome = ’Línguas’;

END;

Page 20: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções - Nested Tables (4)

DECLAREpsic_cursos ListaCursos;

BEGINSELECT cursos INTO psic_cursos FROM departamento

WHERE nome = ’Psicologia’;...

END;

Page 21: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções - VARRAYSQL> CREATE TYPE Projeto AS OBJECT (2 project_no NUMBER(2),3 titulo VARCHAR2(35),4 custo NUMBER(7,2));

SQL> CREATE TYPE ListaProjetos AS VARRAY(50) OF Projeto;

SQL> CREATE TABLE departamento (2 dept_id NUMBER(2),3 nome VARCHAR2(15),4 orcamento NUMBER(11,2),5 projetos ListaProjetos);

Page 22: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções – VARRAY (2)

BEGININSERT INTO departamento

VALUES(50, ’Manutenção’, 925300,ListaProjetos(Projeto(1, ’Reparar Vazamentos’,

2850),Projeto(2, ’Lavar Janelas’, 975),Projeto(3, ’Manutenção Ventiladores’,

1125)));

INSERT INTO departamentoVALUES(60, ’Segurança’, 750400,

ListaProjetos(Projeto(1, ’Transportar Pagamentos’, 9000),

Projeto(2, ’Investigar Roubo Equipamentos’, 2750),

Projeto(3, ’Verificar Saida de Emergência’,1900)));

END;

Page 23: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções – VARRAY (3)

DECLAREnovos_projetos ListaProjetos :=ListaProjetos(Projeto(1, ’Transportar Pagamentos’,9000), Projeto(2, ’Analisar Alarmes’, 2750), Projeto(3, ’Verificar Extintores’,1900)));

BEGINUPDATE departamento

SET projetos = novos_projetos WHERE dept_id = 60;

END;

Page 24: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções – VARRAY (4)

DECLAREmeus_projetos ListaProjetos;

BEGINSELECT d.projetos INTO meus_projetos FROM departamento d

WHERE d.dept_id = 30;...

END;

Page 25: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções – Função TABLE

BEGININSERT INTOTABLE(SELECT cursos FROM departamento WHERE nome = ’Línguas’)

VALUES(1234, ’Inglês Instrumental’, 4);END;

DECLAREajuste INTEGER DEFAULT 1;

BEGINUPDATE TABLE(SELECT cursos FROM departamento

WHERE nome = ’Psicologia’) cSET c.creditos = c.creditos + ajuste

WHERE c.n_curso IN (2200, 3540);END;

Page 26: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções – Função TABLE (2)

DECLAREmeu_n_curso NUMBER(4);meu_titulo VARCHAR2(35);

BEGINSELECT c.n_curso, c.titulo INTO meu_n_curso, meu_titulo

FROM TABLE(SELECT cursos FROM departamentoWHERE nome = ’Línguas’) c

WHERE c.n_curso = 1002;...

END;

Page 27: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções – Função TABLE (3)

BEGINDELETE TABLE(SELECT cursos FROM departamento

WHERE nome = ’Línguas’) cWHERE c.creditos = 5;

END;

Page 28: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções – Função TABLE (4)

DECLAREmeu_custo NUMBER(7,2);meu_titulo VARCHAR2(35);

BEGINSELECT p.custo, p.titulo INTO meu_custo, meu_titulo

FROM TABLE(SELECT projetos FROM departamento

WHERE dept_id = 50) pWHERE p.project_no = 4;

...END;

Page 29: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções - Elementos

FOR i IN meus_projetos.FIRST..meus_projetos.LAST LOOPIF meus_projetos(i).project_no = proj_no THEN

IF novo_titulo IS NOT NULL THENmeus_projetos(i).titulo := novo_titulo;

END IF;IF novo_custo IS NOT NULL THEN

meus_projetos(i).custo := novo_custo;END IF;EXIT;

END IF;END LOOP;

UPDATE departamento SET projetos = meus_projetos WHERE dept_no = dept_id;

END update_project;

Page 30: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Manipulando Coleções Locais

DECLARErevisado ListaCursos := ListaCursos(Curso(1002, ’Escrita Oficial’, 3),

Curso(2020, ’Literatura e Cinema’, 4),Curso(3010, ’Gramática Portuguesa’, 3),Curso(3550, ’Realismo e Naturalismo’, 4));

num_diferentes INTEGER;BEGIN

SELECT COUNT(*) INTO num_diferentesFROM TABLE(CAST(revisado AS ListaCursos)) novo,TABLE(SELECT cursos FROM departamento

WHERE nome = ’Línguas’) AS antigo WHERE novo.n_curso = antigo.n_curso AND

(novo.titulo != antigo.titulo OR novo.creditos != antigo.creditos);

dbms_output.put_line(num_diferentes);END;

Page 31: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Coleções Multidimensionais - VARRAY

declaretype t1 is varray(10) of integer;type nt1 is varray(10) of t1; /* VARRAY multidimensional */va t1 := t1(2,3,5);

-- Inicia VARRAY multidimensionalnva nt1 := nt1(va, t1(55,6,73), t1(2,4), va);i integer;va1 t1;

begin-- Acesso multidimensionali := nva(2)(3); -- recupera o valor 73dbms_output.put_line(i);

end;

Page 32: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Coleções Multidimensionais – VARRAY (2)

-- adiciona novo elemento a nvanva.extend;nva(5) := t1(56, 32);-- substitui um elemento de primeiro nível (uma dimensão)nva(4) := t1(45,43,67,43345);-- substitui um elemento úniconva(4)(4) := 1; -- troca 43345 por 1-- acrescente um novo elemento ao 4o. Elemento VARRAY-- e armazena 89 nele.nva(4).extend;nva(4)(5) := 89;

end;/

Page 33: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Coleções Multidimensionais - Nested Tables

declaretype tb1 is table of varchar2(20);type ntb1 is table of tb1; /* tabela com elementos também tabelas */type tv1 is varray(10) of integer;type ntb2 is table of tv1; /* tabela com elementos VARRAY */vtb1 tb1 := tb1('one', 'three');vntb1 ntb1 := ntb1(vtb1);vntb2 ntb2 :=ntb2(tv1(3,5), tv1(5,7,3)); /* tabela com elementos VARRAY */

Page 34: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Coleções Multidimensionais - Nested Tables (2)

beginvntb1.extend;vntb1(2) := vntb1(1);-- apaga o primeiro elemento de vntb1vntb1.delete(1);/* apaga a primeira cadeia da segunda tabela na nested table */vntb1(2).delete(1);

end;/

Page 35: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Métodos de ColeçõesEXISTSIF cursos.EXISTS(i) THEN cursos(i) := novo_curso;

END IF;

COUNTIF projetos.COUNT = 25 THEN ...

LIMITIF projetos.LIMIT = 25 THEN

marcus
Page 36: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Métodos de Coleções (2)FIRST e LASTIF cursos.FIRST = cursos.LAST THEN ... /* só um

elemento */FOR i IN cursos.FIRST..cursos.LAST LOOP ...

PRIOR e NEXTi:=cursos.FIRST; -- o índice do primeiro elementoWHILE i IS NOT NULL LOOP

...i:=cursos.NEXT(i);

END LOOP;

Page 37: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Métodos de Coleções (3)

EXTENDcursos.EXTEND; -- acrescenta 1 elemento NULLcursos.EXTEND(5,1); -- acrescenta 5 cópias do elemento 1cursos.EXTENDS(3); -- acrescenta 3 elementos NULL

TRIMcursos.TRIM(2); -- remove a posição 2cursos.TRIM; -- remove a última posição

DELETEcursos.DELETE(2); -- remove a posição 2cursos.DELETE(2,6); -- remove as posições de 2 a 6projetos.DELETE; -- remove toda a coleção

Atenção: EXTEND, TRIM e DELETE ignoram as posições removidas. Por exemplo, se uma coleção foi criada com 10 elementos, e a posição 10 foi removida por TRIM ou DELETE, EXTEND acrescenta 1 elemento NULL na posição 11.As demais funções (COUNT, LAST, …) não ignoram as posições removidas. Para o exemplo anterior, e imediatamente depois da posição 10 removida, COUNT = 9, LAST = 9, etc.

Page 38: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

ExceçõesCOLLECTION_IS_NULLOperando em uma coleção atomicamente nula.

NO_DATA_FOUNDO índice se refere a um elemento que foi apagado.

SUBSCRIPT_BEYOND_COUNTO índice excede o número de elementos na coleção.

SUBSCRIPT_OUTSIDE_LIMITO índice está fora do intervalo permitido.

VALUE_ERRORO índice é nulo ou não conversível para um inteiro.

Page 39: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Multi Nested TypesCREATE OR REPLACE TYPE Programa_objtyp

CREATE OR REPLACE TYPE Aluno_objtyp

CREATE OR REPLACE TYPE Turma_objtyp

CREATE OR REPLACE TYPE Erro_objtyp AS OBJECT( ErroNo NUMBER, Tipo NUMBER(2), Descricao VARCHAR2(20), VlDescontoNota NUMBER(2,2), Programa_ref REF Programa_objtyp)

Page 40: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Multi Nested Types (2)CREATE OR REPLACE TYPE ErroList_ntabtyp AS TABLE OF Erro_objtyp

CREATE OR REPLACE TYPE Programa_objtyp AS OBJECT( ProgramaNo NUMBER, Nome VARCHAR2(20), DtcEntrega DATE, Nota NUMBER(2), ErroList_ntab ErroList_ntabtyp, Aluno_ref REF Aluno_objtyp)

CREATE OR REPLACE TYPE ProgramaList_ntabtyp AS TABLE OF Programa_objtyp

Page 41: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Multi Nested Types (3)CREATE OR REPLACE TYPE Pessoa_objtyp AS OBJECT( Nome VARCHAR2(40), DtcNascimento DATE)

CREATE OR REPLACE TYPE Aluno_objtyp UNDER Pessoa_objtyp AS OBJECT(

Matricula NUMBER, ProgramaList_ntab ProgramaList_ntabtyp, Turma_ref REF Turma_objtyp)

CREATE OR REPLACE TYPE AlunoList_ntabtyp AS TABLE OF Aluno_objtyp

Page 42: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

Multi Nested Types (4)/*

Turma_objtypAlunoList_ntab

ProgramaList_ntabErroList_ntab */

CREATE OR REPLACE TYPE Turma_objtyp AS OBJECT( Codigo NUMBER, Horario DATE, Vagas NUMBER(2), Periodo_inicial DATE, Periodo_final DATE,

AlunoList_ntab AlunoList_ntabtyp)

Page 43: III – Oracle 9i Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE

CREATE TABLE Turma_objtab OF Turma_objtyp ( PRIMARY KEY(Codigo)) NESTED TABLE AlunoList_ntab STORE AS TurmaAluno_ntab ((PRIMARY KEY (NESTED_TABLE_ID, Matricula)) ORGANIZATION INDEX COMPRESS NESTED TABLE ProgramaList_ntab STORE AS innerAlunoProg_ntab ((PRIMARY KEY (NESTED_TABLE_ID, ProgramaNo)) ORGANIZATION INDEX COMPRESS NESTED TABLE ErroList_ntab STORE AS innerProgErro_ntab ((PRIMARY KEY (NESTED_TABLE_ID, ErroNo)) ORGANIZATION INDEX COMPRESS)) )