DB2 Express-C 9
Banco de Dados
Relacional/XML Nativo
Marcelo Maruyama Diniz
([email protected])
DC – UFSCar
09/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 em
www-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.
Scripts
Para criação, edição e execução de scripts, utilize a
ferramenta Editor de Comandos
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>
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]
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...)
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
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 CLP
CREATE 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 Exemplo
Arquivo arqDescricao.del na pasta C:\
4,<XDS FIL='aluno1.xml'/>,
5,<XDS FIL='aluno2.xml'/>
Arquivo aluno1.xml na pasta C:\temp
<?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>
IMPORT FROM “C:\arqDescricao.del" OF DEL XML FROM
“C:\temp" INSERT INTO tabelaEx
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ó
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
<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


* é usado como caractere
curinga.
// indica o próprio nó ou
qualquer um de seus
descendentes
<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/*/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>
XPath


Predicados são utilizados dentro
de [...]
[n] seleciona o n-ésimo filho do 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/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
XPath


<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>
. representa o nó atual
.. representa o nó pai
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 clients
where 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/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()
SQL/XML
xmltable: retorna uma tabela relacional a partir
de documentos XML.
select t.comment#, i.itemname, t.customerID, Message
from 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ência
Let: atribui uma variável a uma sequência
Where: estabelece condição
Order: reordena itens
Return: monta o resultado da xquery
SQL/XML
Utilizando o FLWOR com SQL/XML
Select 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.
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
XQuery - Exemplos
xquery
For $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/fax
Return $y
Resultado:
<fax>4081112222</fax>
<fax>5559998888</fax>
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”]
Bibliografia

XPath, SQL/XML e XQuery
www.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
Download

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