DB2 Express-C 9 Banco de Dados Relacional/XML Nativo

Post on 16-Mar-2016

31 views 1 download

description

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. Introdução. - PowerPoint PPT Presentation

Transcript of DB2 Express-C 9 Banco de Dados Relacional/XML Nativo

DB2 Express-C 9 Banco de Dados

Relacional/XML Nativo

Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br)

DC – UFSCar09/11/2006

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

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.

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.

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.

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

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.

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

ferramenta Editor de Comandos

PrivilégiosGRANT [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>

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]

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]

DMLINSERT 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...)

Select StatementSELECT <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

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.

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>

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

Criação de tabelas com campos XML Utilizando o Centro de Controle, escolher o

tipo do campo como XML

Utilizando o CLPCREATE TABLE [tabela](

campo1 xml,... )

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

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!

Inserção de dados XML - ExemploArquivo 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>

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.

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 901902

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

/dept/employee/name/text()

Peter PanJohn Doe

XPath * é usado como caractere

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

qualquer um de seus descendentes

XPath Resultado

/dept/employee/*/text() John Doe408 555 1212344Peter Pan408 555 9918216

/dept/*/@id 901902

//name/text() Peter PanJohn 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>

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 901902

/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>

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

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

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

SQL/XMLxmlquery: retorna elementos do documento XML

select xmlquery(‘$c/Client/email’ passing contact as “c”)from clientswhere 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()

SQL/XMLxmltable: 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)

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

XQuery

For: itera por uma sequênciaLet: atribui uma variável a uma sequênciaWhere: estabelece condiçãoOrder: reordena itensReturn: monta o resultado da xquery

SQL/XMLUtilizando o FLWOR com SQL/XML

Select name, xmlquery(‘for $e in $c/Client/email[1] return $e’ Passing contact as “c”)

From clientsWhere 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.

XQueryXQuery 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

XQuery - ExemplosxqueryFor $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/faxReturn $y

Resultado:<fax>4081112222</fax><fax>5559998888</fax>

XQuery - Exemplosxqueryfor $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/Addressorder by $y/zipreturn $y

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

Bibliografia XPath, SQL/XML e XQuerywww.w3schools.com/xpath/default.aspwww.w3schools.com/xquery/default.aspwww-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