8
A Implementação Objeto-Relacional no Oracle Methanias Colaço Rodrigues Júnior A maior parte dos sistemas gerenciadores de bancos de dados (SGBDs) utilizados é basea- da no modelo relacional. No entanto, SGBDs baseados em outros modelos têm surgido devido à demanda de novas aplicações. Muitas aplicações, im- pulsionadas pela WEB, requererem técnicas de acesso que melhorem o desempenho e estruturas de dados muito mais complexas que as tabelas relacionais, com diversos tipos adicionais, como imagem e vídeo, fun- damentados na tecnologia de orientação a objetos. A principal estrutura do modelo objeto-relacional são as tabelas, entretanto, com muito mais recursos do que as tabelas puramente relacionais. Entre esses recursos podemos destacar: definição de tipos pelo usuário, registros e vetores, métodos e funções, refe- rências, herança e polimorfismo. São acrescentadas também estruturas à linguagens de consulta relacio- nais, como SQL, para tratar os tipos de dados acres- centados. O objetivo é preservar os fundamentos re- lacionais, em particular o acesso declaratório ao dado, acrescentando novas funcionalidades. Para utilizar os recursos de orientação a objetos a Oracle, a partir da versão 8, implementou diversos conceitos que definem um modelo objeto-relacional tais como: tipo objeto, tabela de objetos, etc. Exami- naremos os principais conceitos a seguir. Modelo Objeto-Relacional Oracle Tipo Objeto O Oracle suporta o conceito de objetos comple- xos. Podemos criar tipos de dados adicionais e de- pois fazermos referência a esses tipos de dados den- tro de outros objetos. Essa capacidade de estender o banco de dados com tipos adicionais é um recur- so muito importante, pois ajuda a simplificar, por exemplo, a complexidade do tratamento a tipos de dados complexos. Um outro ponto importante a observar é que os ti- pos criados são gravados no esquema armazenado no banco de dados. Então, outras declarações que aces- sam o banco de dados podem fazer uso das definições desses tipos. Tipicamente, as definições de tipo em linguagens de programação (incluindo linguagens de programação persistentes) não são armazenadas em um banco de dados e só podem ser vistas por pro- gramas que incluem um arquivo texto contendo as definições. O exemplo da C 1 demonstra a criação de um tipo de dados definido pelo usuário. C 1. create type t_endereco as object ( rua varchar2(40) cidade varchar2(30), uf char(2),cep number(8) ); Ainda é possível usar tipos aninhados, ou seja, um tipo pode ser um atributo de outro tipo. O exemplo da C 2 mostra o tipo t_endereco sendo referenciado por t_funcionario. sql15.indb 8 24/11/2004 20:00:44

SqlM Objeto Relacional Oracle Artigo1sql15

Embed Size (px)

Citation preview

Page 1: SqlM Objeto Relacional Oracle Artigo1sql15

8 15ª Edição

A Implementação Objeto-Relacional

no OracleMethanias Colaço Rodrigues Júnior

A maior parte dos sistemas gerenciadores de bancos de dados (SGBDs) utilizados é basea-da no modelo relacional. No entanto, SGBDs

baseados em outros modelos têm surgido devido à demanda de novas aplicações. Muitas aplicações, im-pulsionadas pela WEB, requererem técnicas de acesso que melhorem o desempenho e estruturas de dados muito mais complexas que as tabelas relacionais, com diversos tipos adicionais, como imagem e vídeo, fun-damentados na tecnologia de orientação a objetos.

A principal estrutura do modelo objeto-relacional são as tabelas, entretanto, com muito mais recursos do que as tabelas puramente relacionais. Entre esses recursos podemos destacar: definição de tipos pelo usuário, registros e vetores, métodos e funções, refe-rências, herança e polimorfismo. São acrescentadas também estruturas à linguagens de consulta relacio-nais, como SQL, para tratar os tipos de dados acres-centados. O objetivo é preservar os fundamentos re-lacionais, em particular o acesso declaratório ao dado, acrescentando novas funcionalidades.

Para utilizar os recursos de orientação a objetos a Oracle, a partir da versão 8, implementou diversos conceitos que definem um modelo objeto-relacional tais como: tipo objeto, tabela de objetos, etc. Exami-naremos os principais conceitos a seguir.

Modelo Objeto-Relacional OracleTipo Objeto

O Oracle suporta o conceito de objetos comple-xos. Podemos criar tipos de dados adicionais e de-pois fazermos referência a esses tipos de dados den-tro de outros objetos. Essa capacidade de estender o banco de dados com tipos adicionais é um recur-

so muito importante, pois ajuda a simplificar, por exemplo, a complexidade do tratamento a tipos de dados complexos.

Um outro ponto importante a observar é que os ti-pos criados são gravados no esquema armazenado no banco de dados. Então, outras declarações que aces-sam o banco de dados podem fazer uso das definições desses tipos. Tipicamente, as definições de tipo em linguagens de programação (incluindo linguagens de programação persistentes) não são armazenadas em um banco de dados e só podem ser vistas por pro-gramas que incluem um arquivo texto contendo as definições.

O exemplo da C 1 demonstra a criação de um tipo de dados definido pelo usuário.

C 1.

create type t_endereco as object (

rua varchar2(40)

cidade varchar2(30),

uf char(2),cep number(8) );

Ainda é possível usar tipos aninhados, ou seja, um tipo pode ser um atributo de outro tipo. O exemplo da C 2 mostra o tipo t_endereco sendo referenciado por t_funcionario.

O Oracle suporta o conceito de objetos comple- Podemos criar tipos de dados adicionais e de-

pois fazermos referência a esses tipos de dados den-tro de outros objetos. Essa capacidade de estender o banco de dados com tipos adicionais é um recur-

de dados definido pelo usuário.

create type t_endereco as object (

rua varchar2(40)

cidade varchar2(30),

uf char(2),cep number(8) );

Ainda é possível usar tipos aninhados, ou seja, um tipo pode ser um atributo de outro tipo. O exemplo da C 2 mostra o tipo t_endereco sendo referenciado por t_funcionario.

sql15.indb 8 24/11/2004 20:00:44

Page 2: SqlM Objeto Relacional Oracle Artigo1sql15

SQL Magazine . 9

K

SGB

D

A Implementação Objeto-Relacional

no Oracle

C 2.

create type t_funcionario as object (

matricula number(5),

nome varchar2(30),

data_admissao date,

endereco t_endereco);

Tabela de objetosUma tabela de objetos (object table), é uma classe

especial de tabela cujas linhas são objetos. São tabe-las que possuem a estrutura definida por um tipo de dado estruturado, object type. Desta forma, as linhas das tabelas tornam-se instâncias – ou objetos – do tipo que define a sua estrutura. A estes objetos, deno-minamos “objetos de linha”. A Object Table é criada através de um Object Type. Suas colunas consistem exatamente dos atributos definidos no Object Type, e cada linha da Object Table é em si um objeto (ins-tância do object type), possuindo um identificador de objeto (OID).

Por exemplo, uma tabela que manipula objetos do tipo t_funcionario definido anteriormente pode ser definida por:

create table funcionarios of t_funcionario;

Operador VALUEEsse operador retorna o conteúdo de um objeto ar-

mazenado em uma object table. É usado quando for preciso referenciar uma linha de uma object table como um objeto em vez de uma lista de colunas.

Por exemplo, a declaração da C 3 irá armazenar o objeto obtido pela consulta dentro da variável v_funcionario.

C 3.

declare

v_funcionario t_funcionario;

begin

select value(f) into v_funcionario

from funcionarios f

where matricula = 1574;

dbms_output.put_line (v_funcionario.nome);

end;

Para exibir a rua poderíamos usar:

dbms_output.put_line (v_funcionario.endereco.rua);

Tipos ReferênciaNo Oracle, o relacionamento entre duas entidades

pode ser modelado nativamente através de ponteiros que referenciam as entidades relacionadas. Expressa-mos tais relacionamentos utilizando o identificador do objeto (OID) associado a cada instância de um tipo de dado estruturado. Esse identificador é atri-buído automaticamente a objetos, permitindo que o objeto correspondente seja referenciado a partir de outros objetos. Isto é feito através do tipo REF, que encapsula uma referência para um objeto especifica-do. Ou seja, ao declararmos um tipo, podemos de-clarar como seu atributo um ponteiro para outro tipo através da expressão REF.

Esclarecendo:• OID (Object Identifier) - identificador único

global de um objeto em todo o banco de dados Oracle. É produzido quando o objeto é armaze-nado no banco como parte de uma Object Table. Apesar dos OIDs serem usados indiretamente pe-los programas, você nunca pode ver o seu valor;

• REF - ponteiro para um objeto. Não é um OID, mas sim a maneira pela qual nós os “vemos”. É através dos REFs que o Oracle consegue fazer a “junção” de object tables usando navegação por ponto (dot navigation), também conhecida como expressão de caminho. REF é também um opera-dor que retorna o ponteiro para um objeto, dado um sinônimo de uma tabela. Veja exemplo do operador REF na C 9.

A C 4 apresenta um exemplo no qual estão defi-nidos o tipo de dado estruturado t_departamento, a tabela de objetos departamentos e a tabela funcioná-rios. Nesta última, a coluna depto contém uma refe-rência a um identificador único para objetos do tipo t_departamento.

C 4.

create type t_departamento as object (

num_depto number,

nome varchar2(30),

endereco t_endereco );

create table departamentos of t_departamento;

create table funcionarios (

matricula number,

nome varchar2(30),

depto ref t_departamento);

create table departamentos of t_departamento;

Para exibir a rua poderíamos usar:

dbms_output.put_line

sql15.indb 9 24/11/2004 20:00:55

Page 3: SqlM Objeto Relacional Oracle Artigo1sql15

10 . 15ª Edição . 15ª Edição10 . 15ª Edição

Como já dissemos, uma coluna do tipo REF pode re-ferenciar objetos de qualquer tipo presente em qual-quer tabela. Para restringir o escopo de referências para uma única tabela, ou um único tipo, utilizamos a cláusula SCOPE, conforme mostra a C 5.C 5.

create table funcionarios (

matricula number,

nome varchar2(30),

depto ref t_departamento scope is

departamentos);

Pode existir também auto-relacionamento entre objetos. A C 6 mostra um exemplo onde o tipo t_pessoa pode incluir uma referência à outra pessoa (seu amigo).

C 6.

create type t_pessoa as object (

nome varchar2(30),

endereco t_endereco,

data_nasc date,

amigo REF t_pessoa);

Para demonstrar como os dados são inseridos nas tabelas de objetos que contêm atributos do tipo re-ferência, são apresentados dois exemplos na C 7. Neste caso, o atributo conterá uma referência para o referido objeto departamento o qual o funcionário está lotado.

C 7.

insert into departamentos values

(1, ‘ITP’, t_endereco (‘Rua José Seabra, 255’,

‘Aracaju’, ‘SE’, 49000000));

insert into funcionarios values

(4036, ‘Beatriz’, (select ref(d) from departamentos d

where d.nome=’ITP’));

Quando precisarmos recuperar um objeto a par-tir de uma referência podemos utilizar o operador DEREF. A C 8 apresenta um exemplo onde o objeto departamento é recuperado e armazenado dentro da variável v_depto.

C 8.

declare

v_depto departamento;

v_nome_depto varchar2(30);

begin

select deref(depto) into v_depto from

funcionarios

where nome=’Beatriz’;

select v_depto.nome into v_nome_depto from dual;

end;

C 9.

create or replace trigger departamento_d

after delete on departamentos

for each row

declare

d_ref REF t_departamento;

begin

select REF(d) into d_ref from departamentos d

where d.num_depto=:old.num_depto;

update funcionarios f set f.depto = null

where f.depto = d_ref;

end;

Entretanto, vale atentar para o fato de que não é permitido referenciar diretamente um atributo de uma coluna do tipo objeto. Por exemplo, a declaração abaixo é inválida:

select nome, deref(depto).nome from funcionarios;

Uma das vantagens da utilização de referências no projeto de esquemas objeto-relacionais é a possibili-dade de referenciar atributos através dos tipos refe-rência. Como exemplo, suponhamos que queiramos obter o nome do departamento que um funcionário trabalha a partir do seu nome. A declaração a seguir usa a referência armazenada no atributo depto que é um apontador para o respectivo objeto departamen-to. Ou seja, como “depto” é do tipo REF e aponta para o departamento do funcionário, podemos usar a navegação entre objetos (dot navigation ou navegação por ponto) e recuperar o nome do departamento sem a necessidade de uma junção tradicional com a tabela de departamentos.

select f.depto.nome from funcionarios f

where nome=’Beatriz’;

sql15.indb 10 24/11/2004 20:01:48

Page 4: SqlM Objeto Relacional Oracle Artigo1sql15

SQL Magazine . 11

K

SGB

D

Uma outra característica importante a ser destacada refere-se ao uso do tipo REF como restrição de inte-gridade referencial. Embora exista a imposição que uma instância do REF (isto é, OID) seja válida quan-do armazenada em uma tabela, esta imposição não permanece válida, sendo verificada pelos mecanismos de integridade referencial do SGBD. Isto é, um ob-jeto referenciado por um tipo REF pode ser excluído da tabela de objeto correspondente, e desta forma, a referência a este objeto torna-se inválida, não sendo verificada pelo sistema. Tal verificação pode ser feita através de triggers que previnem a exclusão de obje-tos referenciados por REFs ou simplesmente fazem o REF apontar para Null. Com a criação desses triggers para garantir a integridade referencial, adicionamos um processamento adicional (overhead) em nosso esquema.

A C 9 apresenta um exemplo de trigger que atualiza a tabela de funcionários quando um departamento é excluído.

Tipos coleçãoOs tipos coleção (collection types, também co-

nhecidos como sets ou bags) definem estruturas de dados que permitem manipular conjuntos de ele-mentos do mesmo tipo. Portanto, uma coleção repre-sentará um conjunto de elementos de um determi-nado tipo. O Oracle implementa dois tipos de dados coleções: o tipo vetor (varray) e a tabela aninhada (nested table).

Tipo Vetor (VARRAY)Neste caso, é criada uma lista ordenada de ele-

mentos do mesmo tipo. Cada elemento tem um índice, que é um número da posição do elemen-to no vetor. No Oracle, o tipo vetor é chamado de VARRAY porque possui tamanho variável. Por isso, quando for criado é necessário especificar o seu ta-manho máximo. É importante notar que o banco de dados não aloca realmente qualquer espaço; ele apenas define um novo tipo e o armazena no catá-logo do sistema. O seguinte exemplo declara um tipo varray onde é criada uma lista que suporta até cinco telefones:

create type lista_telefones

as varray(5) of varchar2(10);

É possível ainda fazer referência a esse vetor em ou-tra tabela, como o tipo de dados de uma coluna. Por exemplo:

create table pessoa (

nome varchar2(25),

telefone lista_telefones);

Tabelas Aninhadas (Nested tables)Nested Tables são tabelas com colunas cujo tipo de

dado de domínio é outra tabela. Isto é, as tabelas po-dem ser “aninhadas” dentro de outras tabelas como valores na coluna. Isto permite que os relacionamen-tos N-para-N possam ser representados por tabelas aninhadas.

O tipo de dados nested table contém elementos de-sordenados, todos do mesmo tipo, e sem limite de elementos. Quando uma coluna de uma tabela é do tipo nested table, seus dados são armazenados no mesmo lugar desta tabela, ou seja, os dados da nested table são fisicamente armazenados na mesma área de disco. Assim, a substituição de um join por uma tabe-la aninhada, garante um desempenho superior.

B A partir da versão 9i, é possível que uma tabela aninhada

tenha outra tabela aninhada.

Ao criarmos object tables de object types que con-tenham como atributo uma ou mais nested tables, devemos especificar para o Oracle o nome de uma tabela chamada store table, que é usada para guardar a nested table. Incluímos ao final do comando create table a linha:

nested table <nome do atributo>

store as <nome da store table>;

• nome do atributo - nome do atributo (coluna) que é uma nested table;

• nome da store table - nome da tabela onde a nested table será armazenada.

sql15.indb 11 24/11/2004 20:01:49

Page 5: SqlM Objeto Relacional Oracle Artigo1sql15

12 . 15ª Edição . 15ª Edição12 . 15ª Edição

Suponha que o material necessário para o apren-dizado de uma disciplina seja um conjunto de li-vros. Sejam os tipos de dados estruturados t_livro e lista_livros para representar um livro e uma lista de livros. No exemplo da C 10 será criada uma tabela secundária (store table livros_requeridos_tab), que é a tabela que irá armazenar os dados da nested table livros_requeridos.C 10.

create type t_livro as object (

numero number(4),

titulo varchar2(40) );

create type lista_livros as table of t_livro;

-- A defi nição a seguir cria a tabela que irá

-- armazenar todas as informações do material

-- necessário à disciplina:

create table material_disciplina (

departamento char(4),

curso number(3),

livros_requeridos lista_livros)

nested table livros_requeridos store

as livros_requeridos_tab;

A C 11 apresenta como os dados são inseridos na tabela material_disciplina que contém uma tabela de objetos que irá armazenar uma lista de livros.C 11.

insert into material_disciplina

values (‘ccft’, 10,

lista_livros (

t_livro (1, ‘Oracle 9i’),

t_livro (2, ‘Oracle 8i’) ) );

A C 12 mostra um exemplo de uma pesquisa na tabela criada na C 10. Neste caso, são listados os li-vros requeridos do curso número 10 do departamen-to “CCFT”. Observe que usamos a expressão TABLE para representar o conjunto de elementos armazena-dos na nested table livros_requeridos.C 12.

select l.titulo

from material_disciplina m,

table(m.lista_livros) l

where m.departamento=’ccft’ and m.curso=10;

A notação anterior é usada para aplicações que não suportam receber valores num formato em mais de duas dimensões. Se for possível recuperar estes valo-

res, também é possível emitir o comando abaixo:

select m.departamento, m.livros_requeridos

from material_disciplina m;

Com o comando acima, usamos dot navigation nor-malmente e o resultado apresentará todos os núme-ros e títulos de livros requeridos antecedidos pelos respectivos departamentos que fizeram a requisição.

Métodos e funçõesOutro recurso importante é a capacidade de vincu-

lar código aos dados. O Oracle permite a definição deste código fonte utilizando PL/SQL e Java. Isso é uma tentativa de implementação da característica encapsulamento, um dos fundamentos dos bancos de dados orientados a objetos. Entretanto, não temos um encapsulamento completo pelo fato de podermos acessar diretamente as colunas de uma tabela.

Considere o tipo de objeto t_funcionario definido na C 13.C 13.

create type t_funcionario as object (

nome varchar2(30),

data_nasc date,

member function idade return integer,

member procedure altera_nome(p_nome IN

varchar2),

map member function retornar_nome return

varchar2,

order member function comparar_func (p_func in

t_funcionario ) return number);

Neste caso os métodos e funções estão vinculados ao código do tipo de dados t_funcionario. A C 14 apresenta como seria definida a criação da função ida-de do tipo t_funcionario.C 14.

create type body t_funcionario is

member function idade return integer is

I integer;

begin

select trunc(months_between

(sysdate,self.data_nasc) / 12) into I

from dual;

end;

member procedure altera_nome (p_nome IN varchar2) is

begin

nome := p_nome;

end;

end;

sql15.indb 12 24/11/2004 20:02:52

Page 6: SqlM Objeto Relacional Oracle Artigo1sql15

SQL Magazine . 13

K

SGB

D

HerançaA partir do Oracle 9i, um tipo pode ser estendido

criando subtipos que reutilizam a especificação e im-plementação (atributos e métodos) do tipo que ele deriva. Assim, através dos objetos é possível criar uma hierarquia de tipos (ver A 1). Vale informar que não há suporte à herança múltipla e sendo assim, um sub-tipo pode derivar apenas de um único supertipo.

Um subtipo se torna um tipo especial de seu pai pelo fato de possuir novos atributos e métodos e tam-bém de poder redefinir os que foram herdados. Re-definir métodos dá ao subtipo um estilo próprio de executar esses métodos.

A 1. Exemplo de uma hierarquia de tipos.

Tipos e métodos FINAL e NOT FINALA definição do tipo do objeto determina se um sub-

tipo pode ser derivado. Por padrão os tipos de objeto são do tipo FINAL. Por isso, para permitir subtipos, deve ser obrigatoriamente adicionada a expressão NOT FINAL na declaração do tipo do objeto. Por exemplo, a C 15 apresenta uma expressão onde é de-clarado que o tipo t_pessoa pode ser derivado, permi-tindo que sejam criados subtipos a partir dele.

C 15.

create type t_pessoa as object

(codigo number,

nome varchar2(30),

endereço varchar2(100) ) not final;

Assim como os tipos de objetos, os métodos tam-bém podem ser declarados como FINAL ou NOT FINAL. Se um método for definido como FINAL, os subtipos não podem redefinir sua implementa-ção. Métodos são definidos por padrão como NOT FINAL. O exemplo da C 16 cria um tipo de objeto NOT FINAL contendo uma função definida como FINAL.

sql15.indb 13 24/11/2004 20:02:58

Page 7: SqlM Objeto Relacional Oracle Artigo1sql15

14 . 15ª Edição . 15ª Edição14 . 15ª Edição

Comente esta matéria em:www.sqlmagazine.com.br/sql15/

C 16.

create type t as object

(...,

member procedure imprimir(),

fi nal member function alterar(x number)

... ) not fi nal;

Criação de subtiposPodemos criar um subtipo usando a declaração

CREATE TYPE e especificar o seu supertipo através do parâmetro UNDER. Por exemplo:

create type t_Estudante under t_pessoa

( cod_dep number,

disciplina_principal varchar2(30) ) not fi nal;

A declaração acima cria um tipo t_Estudante que é subtipo de t_pessoa. Ele herda todos os atributos e métodos declarados em t_pessoa. São adicionados apenas dois novos atributos com nomes obrigatoria-mente diferentes dos nomes e métodos declarados no seu supertipo.

Como dito anteriormente, um tipo pode ter múl-tiplos subtipos, e esses por sua vez também podem ter subtipos. A declaração abaixo cria outro subtipo t_Empregado herdando de t_Pessoa:

create type t_Empregado under t_Pessoa

(cod_emp number,

setor varchar2(30));

Criação de tabelasPode-se observar que não há estrutura de armazena-

mento associada com os tipos que pertencem à hie-rarquia acima descrita. Um object type é apenas um “molde”, um tipo; não se pode guardar dados nele. Deve-se então, criar tabelas de objetos para manipu-lar as instâncias dos tipos, formando assim uma hie-rarquia de tabelas, como ilustra o exemplo da C 17. C 17.

create table pessoas of t_pessoa;

create table estudantes of t_estudante

under t_pessoa;

create table empregados of t_empregado

under t_pessoa;

ConclusõesO modelo relacional foi amplamente empregado

nos últimos quinze anos e não é possível simplesmen-te ignorar todas as aplicações já construídas. Esses

ABBEY, Michael; ABRAMSON, Ian; COREY, Michael. Oracle 8i: guia introdutório. Rio de Janeiro: Campus, 2000. 701 p. – pp. 58-82.

BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. UML, guia do usuário. Rio de Janeiro: Campus, 2000. 472 p.

Maria de Fátima Almeida; RIBEIRO, Mateus de Freitas. Evolução dos bancos de dados: Um enfoque para os sistemas pós-relacionais. Trabalho de Conclusão de Curso de Ciência da Computação. Aracaju: Universidade Federal de Sergipe, 2000.

CHAUDHRI, Akmal B. e ZICARI, Roberto. Succeeding with Object Databases John Wiley & Sons, 2000. 464 p. - pp. 29-51

Oracle 9i - Application Developer’s Guide: Object-Relational Features. Oracle Corporation, 2001.

SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S. Sistema de Banco de Dados. 3a. ed. São Paulo: Makron Books, 1999.

URMAN, Scott. Oracle 8i: Advanced PL/SQL Programming. Oracle Press.

Oracle 8: PL/SQL Programming. Oracle Press.

F

sistemas devem coexistir com as novas aplicações orientadas a objeto. Para isto, os Bancos de Dados Relacionais estão adquirindo características de orien-tação a objetos, tornando-se um banco híbrido.

Uma base objeto-relacional traz vantagens em rela-ção ao desempenho, pois a utilização de ponteiros e tabelas aninhadas tornam as consultas de um SGB-DOR mais rápidas e compactas que as consultas fei-tas através de junções no modelo relacional.

As linguagens de programação estão buscando a adaptação ao modelo objeto-relacional. Já é possível, utilizando JDBC 3.0, por exemplo, mapear objetos Java para tipos Oracle. Num próximo artigo, abor-daremos como é feito esse mapeamento, bem como suas principais características.

Por fim, vale uma ressalva: um dos grandes proble-mas do modelo Objeto Relacional é a falta de padrão. Isto implica problemas de portabilidade, pois cada SGBDOR possui suas particularidades. S

(www.unit.br/methanias) é Especialista em Ciência da Computação e TI, Mestre em Informática pela UFCG e Professor da Universidade Tiradentes e FASER. Autor do livro “Projetando Sistemas de Apoio à Decisão Baseados em Data Warehouse”, presta consultoria e dá treinamentos em Bancos de Dados, Engenharia de Software, Data Warehouse e Sistemas de Cartão de Crédito.GMethanias Colaço

Rodrigues Júnior

H

sql15.indb 14 24/11/2004 20:03:58

Page 8: SqlM Objeto Relacional Oracle Artigo1sql15

sql15.indb 15 24/11/2004 20:04:00