suporte nativo a xml no oracle - cin.ufpe.brcin.ufpe.br/~if685/oraclexmlnativo.pdf · provê...

13
1 CIn.ufpe.br Fernando Fonseca Ana Carolina Robson Fidalgo Gerenciamento de Dados e Informação Suporte Nativo a XML no Oracle CIn.ufpe.br Oracle & XML Habilita uma fonte confiável para XML Apresenta flexibilidade para permitir ótimo processamento de XML tanto centrado em dados (data-centric) quanto em conteúdo (content-centric) Mantém o compromisso da Oracle com a confiabilidade, segurança, disponibilidade e escalabilidade Implementa as características chave do padrão XML 2 CIn.ufpe.br Oracle & XML Dá suporte aos paradigmas de desenvolvimento centrado em SQL (SQL-centric), em XML (XML- centric) e em documentos (document-centric) Dá suporte a XML nos servidores de banco de dados e de aplicações Inovação sustentável 3 Binary XML Storage & Indexing CIn.ufpe.br Oracle XML DB Conjunto de tecnologias do SGBD Oracle relacionadas ao alto desempenho em armazenamento e recuperação de dados XML Provê suporte nativo a XML tratando os modelos de dados de SQL e XML de uma maneira interoperável Características Suporte aos modelos de dados de XML e XML Schema (incorporados ao SGBD) como definido pelo W3C e a métodos de acesso padrão para navegar e consultar dados XML 4 CIn.ufpe.br Oracle XML DB Características (Cont.) Modos de armazenar, consultar, atualizar e transformar (uso de XSLT) dados XML acessandos-os por SQL Modos de realizar operações XML em dados SQL Um repositório simples e leve para XML no qual se pode organizar e gerenciar conteúdo de BD, incluindo XML, usando uma metáfora arquivo/diretório/URL 5 CIn.ufpe.br Oracle XML DB Características (Cont.) Uma estrutura independente de armazenamento, conteúdo e linguagem de programação para armazenar e gerenciar dados XML Gerenciamento de hierarquias de documentos XML Modos padrão da indústria para acessar e atualizar dados XML XPath da W3C Padrão ISO-ANSI SQL/XML 6

Upload: vohuong

Post on 11-Nov-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

1

CIn.ufpe.br

Fernando Fonseca

Ana CarolinaRobson Fidalgo

Gerenciamento de Dados e Informação

Suporte Nativo a XML no Oracle

CIn.ufpe.br

Oracle & XML

Habilita uma fonte confiável para XML

Apresenta flexibilidade para permitir ótimoprocessamento de XML tanto centrado em dados(data-centric) quanto em conteúdo (content-centric)

Mantém o compromisso da Oracle com aconfiabilidade, segurança, disponibilidade eescalabilidade

Implementa as características chave do padrãoXML

2

CIn.ufpe.br

Oracle & XML

Dá suporte aos paradigmas de desenvolvimentocentrado em SQL (SQL-centric), em XML (XML-centric) e em documentos (document-centric)

Dá suporte a XML nos servidores de banco de

dados e de aplicações

Inovação sustentável

3

Binary XML Storage & Indexing

CIn.ufpe.br

Oracle XML DB

Conjunto de tecnologias do SGBD Oracle

relacionadas ao alto desempenho em

armazenamento e recuperação de dados XML

Provê suporte nativo a XML tratando os

modelos de dados de SQL e XML de uma

maneira interoperável

Características

Suporte aos modelos de dados de XML e

XML Schema (incorporados ao SGBD) como

definido pelo W3C e a métodos de acesso

padrão para navegar e consultar dados XML

4

CIn.ufpe.br

Oracle XML DB

Características (Cont.)

Modos de armazenar, consultar, atualizar etransformar (uso de XSLT) dados XMLacessandos-os por SQL

Modos de realizar operações XML em dadosSQL

Um repositório simples e leve para XML noqual se pode organizar e gerenciar conteúdode BD, incluindo XML, usando uma metáfora

arquivo/diretório/URL

5

CIn.ufpe.br

Oracle XML DB

Características (Cont.)

Uma estrutura independente dearmazenamento, conteúdo e linguagem deprogramação para armazenar e gerenciar

dados XML

Gerenciamento de hierarquias dedocumentos XML

Modos padrão da indústria para acessar eatualizar dados XML

XPath da W3C

Padrão ISO-ANSI SQL/XML

6

2

CIn.ufpe.br

Oracle XML DB

Características

Padrão da indústria (Cont.)

Entrada e saída de conteúdo XML para/do

BD podem ser realizadas por FTP, HTTP(S),e WebDAV

API padrão provê acesso por programas emanipulação de conteúdo XML com Java, Ce PL/SQL

Gerenciamento de memória e otimizações

específicas para XML

7

CIn.ufpe.br

Oracle XML DBTipo pré-definido para criar, extrair, indexar e validardados XML com XML Schema: XMLType

Pode ser aplicado a Coluna ou Tabela

Armazena o conteúdo do documento como textoXML utilizando o tipo de dado Character LargeObject (CLOB) – armazenamento não-estruturado -ou como conjuntos de objetos – armazenamentoestruturado

Principais benefícios

União dos mundos: XML e SQL

Indexação e navegação

Parser embutido

Combinação de XMLType com outros tipos

8

CIn.ufpe.br

Oracle XML DB

Quando usar XMLType

Armazenar e recuperar XML como um todo

Consultas em elementos XML

Utilizar a funcionalidade XPath

Preparar para futuras atualizações

9

CIn.ufpe.br

Oracle XML DB

Arquitetura Browser ou

outra

interfaceFerramenta

Desktop

Ferramenta

FTPBrowser

Acesso

direto HTTP

Acesso por

Serviços

Oracle NET

Aplicação JDBC

Acesso Stream AQ

Oracle

Acesso

WebDAV

Acesso

FTP

SGBD Oracle

Gateways

p/ fontes

externas

Oracle XML DB

Tabelas e Views

XMLType

Repositório

Oracle XML DB

10

CIn.ufpe.br

Oracle XML DB

11

Stream AQ Oracle

Provê o gerenciamento de mensagens e a

comunicação necessária para integração de

aplicações

WebDAV (Web-based Distributed Authoring and

Versioning)

Um conjunto de extensões ao protocolo do HTTP

que permite aos usuários editar e gerenciar

arquivos colaborativamente em servidores Web

remotos

CIn.ufpe.br

Oracle XML DB

Serviços XML em tabelas e views XMLType

Validação

Transformação (Uso de XSLT)

Registro de XML Schema

Create Table (armazenamento LOB ou O-R)

Insert, Delete, Update em tabelas XMLType

Indexação

12

3

CIn.ufpe.br

Oracle XML DB

Recuperar / Gerar XML usando API XML Type

SQL

Java

PL/SQL

C

C++

13

CIn.ufpe.br

Oracle XML DB

Serviços XML em repositórios XML DB

Versão

Segurança ACL (Access Control List)

Diretórios

Recuperar / Gerar XML usando recursos das API

SQL

Java

PL/SQL

14

CIn.ufpe.br

Oracle XML DB

Armazenamento de XMLType

Quando XML Schemas são registrados no

Oracle XML DB, um conjunto de tabelas

default é criado e usado para armazenar

instâncias de documentos XML associados a

cada schema

Esses documentos também podem ser vistos

e acessados no repositório Oracle XML DB

15

CIn.ufpe.br

Oracle XML DBTabelas e colunas XMLType podem ser

restringidas de acordo com um XML Schema

O SGBD garantirá que somente os

documentos XML que sejam validados de

acordo com o XML Schema possam ser

armazenados na coluna ou na tabela

Desde que o conteúdo da tabela esteja de

acordo com uma estrutura conhecida de

XML, o Oracle XML DB pode usar a

informação contida no XML schema para

fornecer processamento de consultas ou de

atualizações mais inteligente de dados XML

16

CIn.ufpe.br

Oracle XML DB

Tabelas e colunas XMLType podem ser restringidasde acordo com um XML Schema (Cont.)

Restringir o XMLType a um XML Schema

Fornece a opção de armazenar o conteúdo dodocumento usando técnicas de armazenamentoestruturado

Decompõe o conteúdo do documento XMLe o armazena como um conjunto de objetosSQL, em vez de simplesmente armazenar odocumento como texto em um CLOB

O modelo de objeto usado para armazenaro documento é derivado automaticamente doconteúdo do XML schema

17

CIn.ufpe.br

SGBD Oracle

Oracle XML DB

Acesso

HTTP

Direto

Acesso

Oracle

Net

Acessos

WebDAV e

FTP

Acesso

a streams

AQ Oracle

JDBC

Armazenamento de XMLType

18

4

CIn.ufpe.br

ArmazenamentoXML estruturado

nativo

TabelasXMLType

VisõesXMLType

Repositório

HandlerProtocoloHTTP

HandlerProtocolos DAV, FTP

EngenhoSQL

SGBD Oracle

OracleXMLDB

XML Schemas

ArmazenamentoCLOB

Tabelaslocais

DBLinksTabelasremotas

Índicehierárquico

Índices:•B-Tree•Texto•Baseadoem função•Bitmap

19

CIn.ufpe.br

Recursos

XML Parsers

Suporte a interfaces DOM e SAX

XML Class Generator

Código fonte a partir de XML DTD ou Schema

XML SQL Utility

Gerar documento XML a partir de consulta SQL

DBMS_XMLGEN, SYS_XMLGEN, ...

20

CIn.ufpe.br

Usando XML

Criando tabela com atributo XML

CREATE TABLE lojas(loja_id NUMBER(5),loja_desc SYS.XMLTYPE,loja_nome VARCHAR2(35),localizacao_id NUMBER(4));

Coluna SYS.XMLTYPE

21

Armazenamento CLOB(Não estruturado)

CIn.ufpe.br

Usando XML

Criando tabela XML como objeto (Binário)

Duas formas

Como uma tabela XMLTYPE

CREATE TABLE clientes OF XMLTYPE;

22

CIn.ufpe.br

Usando XML

Criando tabela XML como objeto (Binário) (Cont.)

Solução objeto-relacional

CREATE TABLE lojas (

loja_id NUMBER(5),loja_desc XMLTYPE,

loja_nome VARCHAR2(35),localizacao_id NUMBER(4))

XMLTYPE column loja_descXMLSCHEMA "http://www.cin.ufpe.br/~fdfd/CadeiaLojas.xsd"

ELEMENT "CadeiaLojas"

STORE AS OBJECT RELATIONAL;

23

CIn.ufpe.br

Usando XML

Validação de conteúdo de um XMLType de acordocom um XML Schema

Uso do método

24

schemavalidate( )

5

CIn.ufpe.br

Usando XML

Registro de esquema XML com armazenamentoobjeto-relacional

DBMS_XMLSCHEMA.registerSchema (

SCHEMAURL => 'http://www.cin.ufpe.br/~fdfd/CadeiaLojas.xsd',

SCHEMADOC => xmlType(bfilename('XMLDIR','cl.xsd'),

nls_charset_id('AL32UTF8')),

GENTYPES => TRUE,

GENTABLES => TRUE )

25

CIn.ufpe.br

Usando XML –Armazenamento CLOB

Inserindo dados XML

Função createXML() para instanciação

INSERT INTO lojas (loja_id, loja_desc)VALUES (1001, sys.XMLType.createXML(

' <Loja LjNo=" 100"><Predio>Próprio</Predio>

</Loja>' ));

Função createXML( )

26

CIn.ufpe.br

Usando XML –Armazenamento CLOB

Consultando XML

SELECTl.loja_desc.extract('/Loja/Predio/text( ) ').getStringVal( )

"Predio"FROM lojas l;

Função extract( )

27

CIn.ufpe.br

Usando XML –Armazenamento CLOB

Atualizando XML

UPDATE lojas SET loja_desc =Sys.XMLType.createXML(

'<Loja ljNo= " 200 " ><Predio>Alugado</Predio>

</Loja>') WHERE loja_id = 1004;

Função createXML( )

28

CIn.ufpe.br

Usando XML –Armazenamento CLOB

Removendo XML

DELETE FROM lojas lWHERE l.loja_desc.extract('//Predio/text( ) ').getStringVal( )

= ' Alugado';

Função extract( )

29

CIn.ufpe.br

ExemploConsiderando a tabela Lojas como definido abaixo

INSERT INTO lojas (loja_id, loja_desc)

VALUES (1001, sys.XMLType.createXML( ' <Loja LjNo="100">

<Predio>Próprio</Predio> </Loja>' ));

INSERT INTO lojas (loja_id, loja_desc)

VALUES (1002, sys.XMLType.createXML( ' <Loja LjNo="200">

<Predio>Alugado</Predio> </Loja>' ));

INSERT INTO lojas (loja_id, loja_desc)

VALUES (1003, sys.XMLType.createXML( ' <Loja LjNo="300">

<Predio>Comodato</Predio> </Loja>' ));

INSERT INTO lojas (loja_id, loja_desc)

VALUES (1004, sys.XMLType.createXML('<Loja LjNo="400">

<Predio>Leasing</Predio> </Loja>' ));30

Inserindo os dados

CREATE TABLE lojas(loja_id NUMBER(5),loja_desc SYS.XMLTYPE);

6

CIn.ufpe.br

Exemplo

Realizando consulta SQL convencional

SELECT * FROM lojas;

Resultado

LOJA_ID LOJA_DESC

1001 <Loja LjNo="100">

<Predio>Próprio</Predio>

</Loja>

1002 <Loja LjNo="200">

<Predio>Alugado</Predio>

</Loja>

1003 <Loja LjNo="300">

<Predio>Comodato</Predio>

</Loja>

1004 <Loja LjNo="400">

<Predio>Leasing</Predio>

</Loja>31

CIn.ufpe.br

Exemplo

Realizando a consulta – manipulação XML

SELECT

l.loja_desc.extract('/Loja/Predio/text( )').getStringVal( )

"Predio"

FROM lojas l;

Predio

Próprio

Alugado

Comodato

Leasing

Resultado

32

Expressão XPATH

CIn.ufpe.br

Exemplo

Realizando a consulta

SELECT

l.loja_desc.extract('/Loja/Predio/text( )').getStringVal( )

"Predio", l.loja_id

FROM lojas l;

Predio LOJA_ID

Próprio 1001

Alugado 1002

Comodato 1003

Leasing 1004

Resultado

33

CIn.ufpe.br

Exemplo

Executando o comando

UPDATE lojas SET loja_desc =

Sys.XMLType.createXML(

'<Loja ljNo="300">

<Predio>Alugado</Predio>

</Loja>') where loja_id = 1004;

34

CIn.ufpe.br

Exemplo

Repetindo a consulta

SELECT

l.loja_desc.extract('/Loja/Predio/text( )').getStringVal( )

"Predio" , l.loja_id

FROM lojas l;

Resultado

Predio LOJA_ID

Próprio 1001

Alugado 1002

Comodato 1003

Alugado 1004

35

CIn.ufpe.br

Exemplo

Executando o comando

DELETE FROM lojas l

WHERE l.loja_desc.extract('//Predio/text( )').getStringVal( )

= 'Alugado';

36

7

CIn.ufpe.br

Exemplo

Repetindo a consulta

SELECT

l.loja_desc.extract('/Loja/Predio/text( )').getStringVal( )

"Predio"

FROM lojas l;

Predio

Próprio

Comodato

Resultado

37

Removidas as duas tuplas

com informação sobre

Prédio = Alugado

CIn.ufpe.br

Outras funcionalidades

Considerar a tabela

CREATE TABLE carro(

chassi VARCHAR2(20) NOT NULL,

modelo VARCHAR2(30) NOT NULL,

data_carro DATE NOT NULL,

km_carro INTEGER NOT NULL,

CONSTRAINT carro_pk

PRIMARY KEY(chassi)

);

38

CIn.ufpe.br

Outras funcionalidades

Inserindo dados

INSERT INTO carro(chassi, modelo, data_carro, km_carro)

VALUES ('1', 'Clio', to_date('22/03/2007','DD/MM/YYYY'),

1231);

INSERT INTO carro(chassi, modelo, data_carro, km_carro)

VALUES ('2', 'Audi A4', to_date('30/04/2007','DD/MM/YYYY'),

1245);

INSERT INTO carro(chassi, modelo, data_carro, km_carro)

VALUES ('3', 'Scenic', to_date('23/02/2007','DD/MM/YYYY'),

1000);

INSERT INTO carro(chassi, modelo, data_carro, km_carro)

VALUES ('4', 'Gol', to_date('01/03/2007','DD/MM/YYYY'), 700);

INSERT INTO carro(chassi, modelo, data_carro, km_carro)

VALUES ('5', 'Ferrari', to_date('11/01/2007','DD/MM/YYYY'), 1290);

39

CIn.ufpe.br

Outras funcionalidades

Função SYS_XMLGEN ( )

Usada para gerar XML dentro de consultas SQL

Mistura elementos de XML com SQL

Retorna um tipo XMLType

Realizando a consulta

SELECT SYS_XMLGEN(modelo) as XML FROM carro;

40

CIn.ufpe.br

Outras funcionalidades

Resultado

XML

<?xml version="1.0"?> <MODELO>Clio</MODELO>

<?xml version="1.0"?> <MODELO>Audi A4</MODELO>

<?xml version="1.0"?> <MODELO>Scenic</MODELO>

<?xml version="1.0"?> <MODELO>Gol</MODELO>

<?xml version="1.0"?> <MODELO>Ferrari</MODELO>

41

CIn.ufpe.br

Outras funcionalidades

Pacote DBMS_XMLGEN

Cria documentos XML a partir de consultas SQL

Um roteiro de uso

Permitir output na interface de caracteres

Set serveroutput on;

Definir um bloco

Declarar variável para criar um contexto

ctx dbms_xmlgen.ctxhandle;

42

Variável

ContextoTipo

(pacote)

Método

do

Pacote

8

CIn.ufpe.br

Outras funcionalidades

Definir um bloco (Cont.)

Declarar variável do tipo CLOB paraarmazenar o arquivo XML gerado

result clob;

43

Consulta SQL para

gerar resposta em

documento XML

Criar um novo contexto com a consulta SQLapropriada

ctx := dbms_xmlgen.newContext('select *from carro');

Variável

Método

do

Pacote CIn.ufpe.br

Outras funcionalidadesDefinir um bloco (Cont.)

Personalizar a tag raiz do documentoDBMS_XMLGEN.setRowset(ctx, 'Locadora');

44

Personalizar a tag de entidade

DBMS_XMLGEN.setRowTag(ctx,'CARRO');

Método

do

Pacote

Personalização

da raiz

Método

do

Pacote

Personalização

da linha

Variável

Contexto

Variável

Contexto

CIn.ufpe.br

Outras funcionalidadesDefinir um bloco (Cont.)

Gerar um valor CLOB como resultado

result := dbms_xmlgen.getXML(ctx);

Dar saída do resultadodbms_output.put_line(result);

Método

do

Pacote Variável

do Tipo

CLOB

Fechar o contextodbms_xmlgen.closeContext(ctx);

Variável

contexto

Método

de

Pacote

45

CIn.ufpe.br

46

Outras funcionalidadesExemplo de bloco

set serveroutput on;

declare

ctx dbms_xmlgen.ctxhandle;

result clob;

begin

-- criar um novo contexto para a consulta SQL

ctx := dbms_xmlgen.newContext('select * from carro');

-- personalizar as tags raiz e de entidade

DBMS_XMLGEN.setRowsetTag(ctx, 'LOCADORA');

DBMS_XMLGEN.setRowTag(ctx,'CARRO');

-- gerar um valor CLOB como resultado

result := dbms_xmlgen.getXML(ctx);

-- dar saída do resultado

dbms_output.put_line(result);

-- fechar o contexto

dbms_xmlgen.closeContext(ctx);

end;

/

CIn.ufpe.br

Outras funcionalidades

Resultado<?xml version="1.0"?>

<LOCADORA>

<CARRO>

<CHASSI>1</CHASSI>

<MODELO>Clio</MODELO>

<DATA_CARRO>22/03/07</DATA_CARRO>

<KM_CARRO>1231</KM_CARRO>

</CARRO>

<CARRO>

<CHASSI>2</CHASSI>

<MODELO>Audi A4</MODELO>

<DATA_CARRO>30/04/07</DATA_CARRO>

<KM_CARRO>1245</KM_CARRO>

</CARRO>

47

CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

<CARRO>

<CHASSI>3</CHASSI>

<MODELO>Scenic</MODELO>

<DATA_CARRO>23/02/07</DATA_CARRO>

<KM_CARRO>1000</KM_CARRO>

</CARRO>

<CARRO>

<CHASSI>4</CHASSI>

<MODELO>Gol</MODELO>

<DATA_CARRO>01/03/07</DATA_CARRO>

<KM_CARRO>700</KM_CARRO>

</CARRO>

48

9

CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

<CARRO>

<CHASSI>5</CHASSI>

<MODELO>Ferrari</MODELO>

<DATA_CARRO>11/01/07</DATA_CARRO>

<KM_CARRO>1290</KM_CARRO>

</CARRO>

</LOCADORA>

49

CIn.ufpe.br

Outras funcionalidades

Considerando o contexto objeto-relacional

Dado o modelo ERE

1N

50

CIn.ufpe.br

Outras funcionalidades

Criação de Tipos

CREATE OR REPLACE TYPE tp_compositor AS OBJECT (

nome VARCHAR2(16) );

/

CREATE OR REPLACE TYPE tp_compositores AS VARRAY(3) OF

tp_compositor;

/

51

CIn.ufpe.br

Outras funcionalidades

Criação de Tipos (Cont.)

CREATE OR REPLACE TYPE tp_faixa AS OBJECT(

cod integer,

titulo varchar2(23),

compositores tp_compositores

) ;

/

52

CIn.ufpe.br

1N

Outras funcionalidades

Criação de Tipos (Cont.)

CREATE OR REPLACE TYPE tp_ref_relac AS OBJECT(

faixa REF tp_faixa);

/

CREATE TYPE tp_nt_ref_relac AS TABLE OF tp_ref_relac;

/

53

CIn.ufpe.br

Outras funcionalidades

Criação de Tipos (Cont.)

1N

CREATE OR REPLACE TYPE tp_cd AS OBJECT (

cod INTEGER,titulo VARCHAR2(20),genero VARCHAR2(12),faixas tp_nt_ref_relac

);

/

54

10

CIn.ufpe.br

Outras funcionalidades

Criação de Tabelas

1N

CREATE TABLE tb_faixa OF tp_faixa(cod PRIMARY KEY);

CREATE TABLE tb_cd OF tp_cd(cod PRIMARY KEY)NESTED TABLE faixas STORE AS lista_faixas;

55

CIn.ufpe.br

Outras funcionalidades

Inserir dados – tb_faixa

INSERT INTO tb_faixa VALUES

(tp_faixa(1, 'Nossa Canção', tp_compositores(

tp_compositor('Roberto Carlos'),

tp_compositor('Erasmo Carlos') )));

INSERT INTO tb_faixa VALUES

(tp_faixa(2, 'Negro Gato', tp_compositores(

tp_compositor('Roberto Carlos'),

tp_compositor('Erasmo Carlos'),

tp_compositor('Rossini Pinto') )));

56

CIn.ufpe.br

Outras funcionalidades

Inserir dados – tb_faixa (Cont.)

INSERT INTO tb_faixa VALUES

(tp_faixa(3, 'Copacabana', tp_compositores(

tp_compositor('Antonio Maria') )));

INSERT INTO tb_faixa VALUES

(tp_faixa(4, 'Desafinado', tp_compositores(

tp_compositor('João Gilberto') )));

INSERT INTO tb_faixa VALUES

(tp_faixa(5, 'Todo mundo gosta de mim', tp_compositores(

tp_compositor('Ronaldo Boscoli'),

tp_compositor('Nelson Mota'),

tp_compositor('Tom Zé'))));

57

CIn.ufpe.br

Outras funcionalidades

Inserir dados – tb_cd

INSERT INTO tb_cd VALUES

(1, 'Perfil', 'Coletânea', tp_nt_ref_relac (

tp_ref_relac((SELECT REF(F) FROM tb_faixa F WHERE

F.cod =1)),

tp_ref_relac((SELECT REF(F) FROM tb_faixa F WHERE

F.cod =2))));

INSERT INTO tb_cd VALUES

(2, 'Páginas da Vida', 'Novela', tp_nt_ref_relac (

tp_ref_relac((SELECT REF(F) FROM tb_faixa F WHERE

F.cod =3)),

tp_ref_relac((SELECT REF(F) FROM tb_faixa F WHERE

F.cod =4))));

58

CIn.ufpe.br

Outras funcionalidades

Inserir dados – tb_cd (Cont.)

INSERT INTO tb_cd VALUES

(3, 'Belíssima', 'Novela', tp_nt_ref_relac (

tp_ref_relac((SELECT REF(F) FROM tb_faixa F WHERE

F.cod =5)) ));

Consulta – tb_cd

SELECT * FROM tb_cd;

59

CIn.ufpe.br

Outras funcionalidades

Resposta da Consulta

COD TITULO GENERO FAIXAS(FAIXA)

1 Perfil Coletânea TP_NT_REF_RELAC(TP_REF_RELAC(0000220208241F5C6

19D99F743E05015AC07026337241F5C619D96F743E050

15AC07026337),

TP_REF_RELAC(0000220208241F5C619D9AF743E05015

AC07026337241F5C619D96F743E05015AC07026337))

1 Páginas da Vida Novela TP_NT_REF_RELAC(TP_REF_RELAC(0000220208241F5C6

19D9BF743E05015AC07026337241F5C619D96F743E05

015AC07026337),

TP_REF_RELAC(0000220208241F5C619D9CF743E05015

AC07026337241F5C619D96F743E05015AC07026337))

3 Belíssima Novela TP_NT_REF_RELAC(TP_REF_RELAC(0000220208241F5C6

19D9DF743E05015AC07026337241F5C619D96F743E05

015AC07026337))

60

11

CIn.ufpe.br

Outras funcionalidades

Gerar documento XML contendo os títulos dos CD –

Uso de SYS_XMLGEN

SELECT SYS_XMLGEN(titulo) as XML FROM tb_cd;

XML

----------------------------------

<?xml version="1.0"?>

<TITULO>Perfil</TITULO>

<?xml version="1.0"?>

<TITULO>Páginas da Vida</TITULO>

<?xml version="1.0"?>

<TITULO>Belíssima</TITULO>

Resposta da Consulta

61

CIn.ufpe.br

Outras funcionalidadesGerar documento XML contendo o resultado daconsulta select * from tb_cd – Uso deDBMS_XMLGEN

set serveroutput on;

declare

ctx dbms_xmlgen.ctxhandle;

result clob;

begin

-- criar um novo contexto para a consulta SQL

ctx := dbms_xmlgen.newContext('select * from tb_cd');

-- gerar um valor CLOB como resultado

result := dbms_xmlgen.getXML(ctx);

-- dar saída do resultado

dbms_output.put_line(result);

-- fechar o contexto

dbms_xmlgen.closeContext(ctx);

end;

/62

CIn.ufpe.br

Outras funcionalidadesResultado

<?xml version="1.0"?>

<ROWSET>

<ROW>

<COD>1</COD>

<TITULO>Perfil</TITULO>

<GENERO>Coletânea</GENERO>

<FAIXAS>

<TP_REF_RELAC>

<FAIXA>0000220208241F5C619D99F7

43E05015AC07026337241F5C619D96

F743E05015AC07026337</FAIXA>

</TP_REF_RELAC>

63

Co

d, T

itu

lo, G

en

ero

, Fa

ixa

s

CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

<TP_REF_RELAC>

<FAIXA>0000220208241F5C619D9AF7

43E05015AC07026337241F5C619D96

F743E05015AC07026337</FAIXA>

</TP_REF_RELAC>

</FAIXAS>

</ROW>

<ROW>

<COD>2</COD>

<TITULO>Páginas da Vida</TITULO>

<GENERO>Novela</GENERO>64

CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

<FAIXAS>

<TP_REF_RELAC>

<FAIXA>0000220208241F5C619D9BF7

43E05015AC07026337241F5C619D96

F743E05015AC07026337</FAIXA>

</TP_REF_RELAC>

<TP_REF_RELAC>

<FAIXA>0000220208241F5C619D9CF7

43E05015AC07026337241F5C619D96

F743E05015AC07026337</FAIXA>CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

</TP_REF_RELAC>

</FAIXAS>

</ROW>

<ROW>

<COD>3</COD>

<TITULO>Belíssima</TITULO>

<GENERO>Novela</GENERO>

<FAIXAS>

<TP_REF_RELAC>

<FAIXA>0000220208241F5C619D9DF7

43E05015AC07026337241F5C619D96

F743E05015AC07026337</FAIXA>66

12

CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

</TP_REF_RELAC>

</FAIXAS>

</ROW>

</ROWSET>

67

CIn.ufpe.br

Outras funcionalidadesGerar documento XML contendo o resultado daconsulta para retornar titulo do CD e o título ecompositores de cada faixa – Uso deDBMS_XMLGEN

set serveroutput on;

declare

ctx dbms_xmlgen.ctxhandle;

result clob;

begin

-- criar um novo contexto para a consulta SQL

ctx := dbms_xmlgen.newContext('select c.titulo, f.faixa.titulo,

f.faixa.compositores from tb_cd c, TABLE(c.faixas)f');

-- personalizar as tags raiz e de entidade

DBMS_XMLGEN.setRowsetTag(ctx, 'Discoteca');

DBMS_XMLGEN.setRowTag(ctx,'CD');68

CIn.ufpe.br

Outras funcionalidades

Gerar documento XML (Cont.)

-- gerar um valor CLOB como resultado

result := dbms_xmlgen.getXML(ctx);

-- dar saída do resultado

dbms_output.put_line(result);

-- fechar o contexto

dbms_xmlgen.closeContext(ctx);

end;

/

69

CIn.ufpe.br

Outras funcionalidades

Resultado <?xml version="1.0"?>

<Discoteca>

<CD>

<TITULO>Perfil</TITULO>

<FAIXA.TITULO>Nossa

Canção</FAIXA.TITULO>

<FAIXA.COMPOSITORES>

<TP_COMPOSITOR>

<NOME>Roberto

Carlos</NOME>

</TP_COMPOSITOR>

<TP_COMPOSITOR>

<NOME>Erasmo Carlos</NOME>

</TP_COMPOSITOR>

70

Tit

ulo

, fa

ixa

.Tit

ulo

, fa

ixa

.co

mp

osi

tore

s

CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

</FAIXA.COMPOSITORES>

</CD>

<CD>

<TITULO>Perfil</TITULO>

<FAIXA.TITULO>Negro

Gato</FAIXA.TITULO>

<FAIXA.COMPOSITORES>

<TP_COMPOSITOR>

<NOME>Roberto

Carlos</NOME>

</TP_COMPOSITOR>

<TP_COMPOSITOR>

<NOME>Erasmo Carlos</NOME>

</TP_COMPOSITOR>71

CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

<TP_COMPOSITOR>

<NOME>Rossini Pinto</NOME>

</TP_COMPOSITOR>

</FAIXA.COMPOSITORES>

</CD>

<CD>

<TITULO>Páginas da Vida</TITULO>

<FAIXA.TITULO>Copacabana</FAIXA.TITULO>

<FAIXA.COMPOSITORES>

<TP_COMPOSITOR>

<NOME>Antonio Maria</NOME>

</TP_COMPOSITOR>

</FAIXA.COMPOSITORES>72

13

CIn.ufpe.br

Outras funcionalidadesResultado (Cont.)

<TP_COMPOSITOR>

<NOME>Rossini Pinto</NOME>

</TP_COMPOSITOR>

</FAIXA.COMPOSITORES>

</CD>

<CD>

<TITULO>Páginas da Vida</TITULO>

<FAIXA.TITULO>Copacabana</FAIXA.TITULO>

<FAIXA.COMPOSITORES>

<TP_COMPOSITOR>

<NOME>Antonio Maria</NOME>

</TP_COMPOSITOR>

</FAIXA.COMPOSITORES>

73

CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

</CD>

<CD>

<TITULO>Páginas da Vida</TITULO>

<FAIXA.TITULO>Desafinado</FAIXA.TITULO>

<FAIXA.COMPOSITORES>

<TP_COMPOSITOR>

<NOME>João

Gilberto</NOME>

</TP_COMPOSITOR>

</FAIXA.COMPOSITORES>

</CD>

<CD>74

CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

<TITULO>Belíssima</TITULO>

<FAIXA.TITULO>Todo mundo gosta de mim</FAIXA.TITULO>

<FAIXA.COMPOSITORES>

<TP_COMPOSITOR>

<NOME>Ronaldo Boscoli</NOME>

</TP_COMPOSITOR>

<TP_COMPOSITOR>

<NOME>Nelson Mota</NOME>

</TP_COMPOSITOR>

75

CIn.ufpe.br

Outras funcionalidades

Resultado (Cont.)

<TP_COMPOSITOR>

<NOME>Tom

Zé</NOME>

</TP_COMPOSITOR>

</FAIXA.COMPOSITORES>

</CD>

</Discoteca>

76

CIn.ufpe.br

Exercício Extra XML OpcionalGerar arquivo XML a partir de consulta em uma dastabelas do modelo OR implementado pela equipeno Oracle

Uma consulta diferente para cada membro daequipe

Criar uma DTD ou XML Schema apropriado para oarquivo XML gerado

Não usar a cláusula ANYCriar uma formatação CSS apropriada para oarquivo gerado – Mostrar dados de tabelas naforma de tabela

Exibir o arquivo no browserData de entrega: junto com a apresentação doprojeto objeto-relacional de cada equipe

77

Vale até 1,0 ponto na prova para

passar por média ou ir para a final