Ae pessoal,
Tem um trabalhinho de BDOO (Banco de Dados Orientado a Objetos) na facul que eu montei tudo certim, os objetos, coleções, tabelas … mas agora não consigo dar um insert :oops: .
(to usando Oracle 9i)
Explicando os objetos
:arrow: T_TELEFONE, T_EMAIL objetos base;
:arrow: T_TELEFONE_TABLE, T_EMAIL_TABLE coleções dos acima;
:arrow: T_ELETRONICO objeto agregando as coleções acima;
:arrow: T_CONTATO contém o t_eletronico (e mais um T_FISICO básico);
:arrow: tblUsuarios tem um campo do tipo T_CONTATO
Criando os objetos
CREATE OR REPLACE TYPE T_TELEFONE
AS OBJECT
(
-- Campos
codPais NUMBER(2),
codArea NUMBER(3),
prefixo NUMBER(5),
numero NUMBER(5),
-- Metodos
MEMBER FUNCTION getSimpleNumber
RETURN varchar2,
--
MEMBER FUNCTION getCompleteNumber
RETURN varchar2
--
);
CREATE OR REPLACE TYPE T_EMAIL
IS OBJECT
(
username varchar2(30),
domain varchar2(30)
);
-- TABELA DE EMAILS
CREATE OR REPLACE TYPE T_EMAIL_TABLE
IS TABLE OF T_EMAIL;
-- TABELA DE TELEFONES
CREATE OR REPLACE TYPE T_TELEFONE_TABLE
IS TABLE OF T_TELEFONE;
CREATE OR REPLACE TYPE T_ELETRONICO
IS OBJECT (
telefones T_TELEFONE_TABLE,
emails T_EMAIL_TABLE
);
-- CONTATO
CREATE OR REPLACE TYPE T_CONTATO
IS OBJECT
(
endereco T_FISICO,
eletronico T_ELETRONICO
);
-- A tabela
CREATE TABLE SMOTA.TBLUSUARIOS (IDUSUARIO NUMBER(5) NOT
NULL, DADOSPESSOAIS SMOTA.T_DADOSPESSOAIS, CONTATO
SMOTA.T_CONTATO) NESTED TABLE
CONTATO.ELETRONICO.EMAILS STORE AS EMAILS, NESTED TABLE
CONTATO.ELETRONICO.TELEFONES STORE AS TELEFONES;
O insert
INSERT INTO
TBLUSUARIOS
VALUES(
idUsuario_sequence.next(),
T_DADOSPESSOAIS("1234","5678","x", "Samuel", "Guedes", "Mota", TO_DATE("10/10/1910", "dd/mm/yyyy") ),
T_CONTATO(
T_FISICO("Rua", " ", " ", " ", " ", " ", "SP", "1234"),
T_ELETRONICO(
emails (T_EMAIL("samuel","samuel.com")),
telefones (T_TELEFONE(55, 12, 555, 0000))
)
)
)
O insert acima reclama do segundo argumento no construtor do T_ELETRONICO.
Alguem tem alguma idéia?
valeus