DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz...

36
DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz ([email protected]) DC – UFSCar 09/11/2006

Transcript of DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz...

Page 1: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

DB2 Express-C 9 Banco de Dados

Relacional/XML Nativo

Marcelo Maruyama Diniz ([email protected])

DC – UFSCar09/11/2006

Page 2: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Agenda

Introdução ao DB2 Express-C 9 Comandos relacionais XML XPath SQL/XML XQuery

Page 3: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Introdução

DB2 Express-C 9: banco de dados relacional/XML nativo da IBM

Disponível para download emwww-306.ibm.com/software/data/db2/express/download.html

XML nativo: campos são dados XML, e não referências para arquivos XML.

Page 4: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Usuários

DB2 não gerencia usuários.

O sistema operacional é o responsável.

Ao instalar, fornecer um nome de usuário e senha existentes, caso contrário uma nova conta será criada.

Page 5: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Instâncias

Podem ser executadas diversas instâncias do DB2 a partir de uma mesma instalação.

Como se vários DB2 executassem independentemente.

Cada instância tem suas configurações individuais.

Uma instância padrão é criada durante a instalação.

Page 6: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Centro de Controle Ferramenta gráfica para utilização do DB2. Recomendada para criação de objetos no banco de dados.

Page 7: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Command Line Processor (CLP) Ferramenta em linha de comando para utilização do DB2. Deve ser invocado através do menu para correta

inicialização das variáveis.

Page 8: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

ScriptsPara criação, edição e execução de scripts, utilize a

ferramenta Editor de Comandos

Page 9: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Privilégios

GRANT [ALL | privilégio]

ON [TABLE | VIEW | INDEX, ...] [objeto]

TO [usuário, ... grupo,..., PUBLIC]

<WITH GRANT OPTION>

REVOKE [ALL | privilégio]

ON [TABLE | VIEW | INDEX, ...] [objeto]

FROM [usuário, ... grupo,..., PUBLIC ]

<BY ALL>

Page 10: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Criação e exclusão de bancos de dados

Recomendável a utilização do Centro de Controle, clicando com botão direito em Todos os Bancos de Dados -> Criar Banco de Dados -> Padrão...

Para habilitar o uso de campos XML, marcar a opção ‘Ativar banco de dados para XML’

Sintaxe simplificada:CREATE DATABASE [banco de dados]DROP DATABASE [banco de dados]

Page 11: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Criação e exclusão de tabelas Recomendável a utilização do Centro de Controle, clicando com

o botão direito em Tabelas -> Criar na sub-árvore do banco de dados.

Sintaxe resumida:

CREATE TABLE [tabela] ([ [campo] [tipo do campo] <NOT NULL> <WITH DEFAULT> ...]<unique constraints><check constraints><referencial constraints>

)

DROP TABLE [tabela]

Page 12: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

DML

INSERT INTO [tabela] <(campos, ...)> values (valores, ...)

INSERT INTO [tabela] <(campos, ...)> [Select...]

UPDATE [tabela] SET [[campo1] = [valor1], ...] <WHERE [condição]>

UPDATE [tabela] SET (campos, ...) = ([Select...]) <WHERE [condição]>

DELETE FROM [tabela] <WHERE [condição]>

DELETE FROM [tabela] (Select...)

Page 13: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Select Statement

SELECT <DISTINCT> (campos, funções, ...) FROM [tabelas, ...] <WHERE [condição]>

SELECT <DISTINCT> (campos, funções, ...) FROM [tabela 1] INNER JOIN [tabela2] ON <condição>

Condição pode utilizar os predicados relacionais (<, >, ...), BETWEEN, NOT, LIKE ,IN, EXISTS e NULL

Page 14: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XML

EXtensible Markup Language Linguagem de marcação para descrição de

dados. O usuário define suas próprias tags de

acordo com a semântica desejada. Pode ser validado segundo a forma com uma

DTD ou um XML Schema.

Page 15: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Exemplo<?xml version="1.0" encoding="ISO-8859-1"?><alunos>

<aluno ra="1"><nome>Débora</nome><cidadeOrigem>Fortaleza</cidadeOrigem><curso>Ciência da Computação</curso><condicao status=“rico” />

</aluno>

<aluno ra="2"><nome>Carla</nome><cidadeOrigem>Olinda</cidadeOrigem><curso>Biologia</curso><condicao status=“pobre” />

</aluno>

</alunos>

Page 16: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Regras

Toda tag aberta deve ser fechada Uma tag pode ser vazia <tag/> Cada tag pode conter subtags, formando

uma estrutura em árvore Cada tag pode conter atributos Todo documento XML deve ter uma tag raiz

Page 17: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Criação de tabelas com campos XML

Utilizando o Centro de Controle, escolher o tipo do campo como XML

Utilizando o CLP

CREATE TABLE [tabela](

campo1 xml,

... )

Page 18: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Inserção de dados XML

INSERT INTO tabelaEx (campoInt, campoXML) values (1, ‘<dado>algumDado</dado>’)

IMPORT FROM “arqDescricao.del” OF DEL XML from “pathParaArqsXML” INSERT INTO tabelaEx

Page 19: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Inserção de dados XML

Onde: arqDescricao.del tem os dados e referências

para arquivos XML a serem incluídos, separados por vírgula.

pathParaArqsXML é o caminho onde os arquivos XML referenciados estão.

Descrever os caminhos completos!

Page 20: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Inserção de dados XML - Exemplo

Arquivo arqDescricao.del na pasta C:\

Arquivo aluno1.xml na pasta C:\temp

IMPORT FROM “C:\arqDescricao.del" OF DEL XML FROM “C:\temp" INSERT INTO tabelaEx

4,<XDS FIL='aluno1.xml'/>, 5,<XDS FIL='aluno2.xml'/>

<?xml version="1.0" encoding="ISO-8859-1"?><aluno ra="1">

<nome>Débora</nome><cidadeOrigem>Fortaleza</cidadeOrigem><curso>Ciência da Computação</curso><condicao status="rico" />

</aluno>

Page 21: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XPath

Linguagem para navegar em documentos XML.

Contém funções pré-definidas para manipulação dos dados.

Há 7 tipos de nós: elemento, atributo, texto, namespace, instrução de processamento, comentário e nó root.

Page 22: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XPath

Caminhos completos para especificar elementos ou atributos

@ é usado para especificar um atributo text() é usado para especificar o texto

dentro de um elemento nó

<dept bldg=“101”><employee id=“901”>

<name>John Doe</name><phone>408 555 1212</phone><office>344</office>

</employee><employee id=“902”>

<name>Peter Pan</name><phone>408 555 9918</phone><office>216</office>

</employee></dept>

XPath Resultado

/dept/@bldg 101

/dept/employee/@id 901

902

/dept/employee/name <name>Peter Pan</name>

<name>John Doe</name>

/dept/employee/name/text()

Peter Pan

John Doe

Page 23: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XPath * é usado como caractere

curinga. // indica o próprio nó ou

qualquer um de seus descendentes

XPath Resultado

/dept/employee/*/text() John Doe

408 555 1212

344

Peter Pan

408 555 9918

216

/dept/*/@id 901

902

//name/text() Peter Pan

John Doe

/dept//phone <phone>408 555 1212</phone>

<phone>408 555 9918</phone>

<dept bldg=“101”><employee id=“901”>

<name>John Doe</name><phone>408 555 1212</phone><office>344</office>

</employee><employee id=“902”>

<name>Peter Pan</name><phone>408 555 9918</phone><office>216</office>

</employee></dept>

Page 24: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XPath Predicados são utilizados dentro

de [...] [n] seleciona o n-ésimo filho do nó

XPath Resultado

/dept/employee[@id="902"]/name <name>Peter Pan</name>

/dept[@bldg="101"]/employee[office > "300"]/name

<name>John Doe</name>

//employee[office="344" OR office="216"]/@id 901

902

/dept/employee[2]/@id 902

<dept bldg=“101”><employee id=“901”>

<name>John Doe</name><phone>408 555 1212</phone><office>344</office>

</employee><employee id=“902”>

<name>Peter Pan</name><phone>408 555 9918</phone><office>216</office>

</employee></dept>

Page 25: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XPath

. representa o nó atual .. representa o nó pai

<dept bldg=“101”><employee id=“901”>

<name>John Doe</name><phone>408 555 1212</phone><office>344</office>

</employee><employee id=“902”>

<name>Peter Pan</name><phone>408 555 9918</phone><office>216</office>

</employee></dept>

XPath Resultado

/dept/employee/name[../@id="902"] <name>Peter Pan</name>

/dept/employee/office[. > "300"] <office>344</office>

/dept/employee[office > "300"]/office <office>344</office>

/dept/employee[name="John Doe"]/../@bldg 101

/dept/employee/name[. = "John Doe"]/../../@bldg 101

Page 26: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

SQL/XML

SQL com extensão XML. Permite consultar nós específicos de documentos

XML armazenados em campos de uma tabela, ao invés de recuperar apenas o documento inteiro.

Utiliza sintaxe do XPath. Funções básicas

xmlexists xmlquery xmltable

Page 27: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

SQL/XML

xmlexists: as linhas retornadas contém um documento XML com o valor especificado. Retorna verdadeiro ou falso.

select name from clientswhere xmlexists(‘$c/Client/Address[zip = “95116”]’

passing clients.contact as “c”)

Seleciona o campo nome da tabela clients de todas as linhas que tem um documento XML no campo contact com nó pai Client, nó filho Address e nó neto zip com valor 95116

Page 28: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

SQL/XML

xmlquery: retorna elementos do documento XML

select xmlquery(‘$c/Client/email’ passing contact as “c”)

from clients

where status = ‘Gold’

Seleciona os nós email filhos do nó Client do documento XML no campo contact da tabela clients sendo o campo status igual a ‘Gold’.

Para selecionar o texto do nó email, utilizar text()

Page 29: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

SQL/XML

xmltable: retorna uma tabela relacional a partir de documentos XML.

select t.comment#, i.itemname, t.customerID, Messagefrom items i,xmltable(‘$c/Comments/Comment’ passing i.comments as “c”columns Comment# integer path ‘CommentID’,CustomerID integer path ‘CustomerID’,Message varchar(100) path ‘Message’) as t

Converte os nós Comment do documento XML no campo comments da tabela items numa tabela de nome t com colunas Comment# (para o nó CommentID), CustomerID (para o nó CustomerID) e Message (para o nó Message)

Page 30: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XQuery

Linguagem para consultar documentos XML. Utiliza sintaxe do XPath. Retorna sequências de dados XML. Expressão iniciada com ‘xquery’

Page 31: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XQuery

For: itera por uma sequência

Let: atribui uma variável a uma sequência

Where: estabelece condição

Order: reordena itens

Return: monta o resultado da xquery

Page 32: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

SQL/XML

Utilizando o FLWOR com SQL/XMLSelect name, xmlquery(‘for $e in $c/Client/email[1] return $e’

Passing contact as “c”)

From clients

Where status = ‘Gold’

Retorna o nome e o resultado da xmlquery.

xmlquery checa o campo contact de cada linha da tabela clients cujo campo status seja igual a ‘Gold’ e, para cada um deles, retorna o primeiro nó email.

Page 33: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XQuery

XQuery para recuperar os contatos do cliente (campo contact é XML)

Xquery db2-fn:xmlcolumn(‘CLIENTS.CONTACT’) (argumento precisa ser maiúsculo!)

db2-fn:xmlcolumn: função com parâmetro que identifica a tabela e o campo XML

Equivalente àSelect contact from clients

Page 34: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XQuery - Exemplos

xquery

For $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/fax

Return $y

Resultado:

<fax>4081112222</fax>

<fax>5559998888</fax>

Page 35: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

XQuery - Exemplos

xquery

for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/Address

order by $y/zip

return $y

xquery

db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/Address[zip=“95116”]

Page 36: DB2 Express-C 9 Banco de Dados Relacional/XML Nativo Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC – UFSCar 09/11/2006.

Bibliografia

XPath, SQL/XML e XQuerywww.w3schools.com/xpath/default.asp

www.w3schools.com/xquery/default.asp

www-128.ibm.com/developerworks/db2/library/techarticle/dm-0511melnyk/

www-128.ibm.com/developerworks/db2/library/techarticle/dm-0604saracco/

www.redbooks.ibm.com/abstracts/SG247315.html