360 likes | 494 Views
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.
E N D
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 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:\ 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 • <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> • Caminhos completos para especificar elementos ou atributos • @ é usado para especificar um atributo • text() é usado para especificar o texto dentro de um elemento nó
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 • <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> • Predicados são utilizados dentro de [...] • [n] seleciona o n-ésimo filho do nó
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
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