Gerenciamento de Dados e Informação

Documentos relacionados
Oracle & XML. Gerenciamento de Dados e Informação. Oracle XML DB. Oracle & XML. Oracle XML DB. Oracle XML DB. Suporte Nativo a XML no Oracle

Suporte Nativo a XML no Oracle 10g

10g PRINCIPAIS SERVIDORES UNIVERSAIS

Gerenciamento de Dados e Informação Fernando Fonseca. Graduação

Oracle Objeto-Relacional. Pablo Vieira Florentino

Oracle & XML. Gerenciamento de Dados e Informação. Oracle XML DB. Oracle & XML. Oracle XML DB. Oracle XML DB. Suporte Nativo a XML no Oracle

Monitoria GDI. Aula Prática. OR (Aula 1)

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

Exercícios com o intuito de cobrar todos os assuntos vistos em sala, relativos à Modelagem Conceitual, SQL, PL e XML. 1ª ETAPA

SuporteNativoa XML no

BD Objeto-Relacional - Motivação

14/9/2009. Banco de Dados

Logado no OracleXE vamos acessar a opção:

Banco de Dados II. PL/SQL - Procedures -Cursor - Funções. Segurança: Introdução; Controle de Acesso; Criptografia; Recursos de SQL.

Dados Semi-Estruturados e XML Vanessa Braganholo. Lista de Exercícios 3 XML Schema

Introdução Sintaxe Básica Retornos Múltiplos Junções em Funções Comando Case Atividade. de Banco de Dados (CREATE FUNCTION) Bruno Neiva Moreno

Banco de Dados Objeto Relacional

Fundamentos de Programação ORACLE: SQL. Prof. Walter Gima

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA, total e disjuntiva.

Administração de Banco de Dados

Avisos. Sumário. Atividade em lab Aula 29. Atividade em lab Aula 29. Programando com SQL Triggers EXERCÍCIO LAB SP. Vista da segunda prova

SQL Pacotes. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados Pacotes

4. BD Objeto-Relacional (BDOR)

Exercício 1 =========== -- criação dos tipos e das tabelas. CREATE TYPE PROFESSOR_TYPE AS OBJECT ( NOME VARCHAR2(15), DISCIPLINA VARCHAR2(15) ); /

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013

SQL Procedural. Josino Rodrigues Neto

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

Preparação criar tabela. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 12/11/2018

XML. Prof. Júlio Machado

Banco de Dados PLPGSQL. Prof. Dr. Joel da Silva

Oracle Database 10g: Fundamentos de SQL e PL/SQL

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl

PL/pgSQL por Diversão e Lucro

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR


Conceitos Básicos. Gerenciamento de Dados e Informação. Introdução. Introdução

A U L A 8 C O N S U L T A S U N I N D O D U A S O U M A I S T A B E L A S P A R T E 2

Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL

WHILE = 0 -- Enquanto não é o fim do cursor, execute.

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

Disciplina: Banco de Dados I Professora: Ms. Márcia Jani. Trabalho de BD1

Uma Abordagem Alternativa para o Armazenamento Electrónico de Dados: O Papel da Norma XML

Sumário. XML (extensible Markup Language)

Configurar o ODBC em ISE 2.3 com base de dados Oracle

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

Linguagem SQL Restrições, Triggers e Views

XML para transferência de dados Estrutura hierárquica do XML DTDs e XML Schema Consultas de documentos XML: XPath e XQuery Transformação de

Oracle Database: Fundamentos de SQL e PL/SQL

Disciplina: Banco de Dados Tema: SQL Parte 2

Revisão de Bancos de Dados

SQL. Prof. Roger Cristhian Gomes

AULA 8 EXEMPLOS CRIAR AS TABELAS PROPOSTAS NA AULA E INSERIR OS REGISTROS SUGERIDOS

Conceitos SQL SQL 19/03/2017 O que é dado? O que é BD? O que é uma informação? O que é SGBD? O que é SQL? O que é BD? O que é SGBD?

A U L A 1 0 C R I A N D O V I E W S V I E W S ( V I S Õ E S )

Oracle PL/SQL Overview


Parte I (correspondente à matéria do 1º teste)

Funções Definidas pelo Usuário

Introdução às funções e procedimentos. SQL suporta funções e procedimentos úteis com tipos de dados específicos

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Oracle Database 12c: Introdução ao SQL Ed. 2

BD II (SI 587) Procedimentos Armazenados

Banco de Dados Avançados Banco de Dados Ativo

Roteiro. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

Rápida revisão do Modelo Relacional

Administração de Banco de Dados

Número: Nome:

TRABALHO DE BANCO DE DADOS

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

Exercício Aula Passada. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

Transacções. Vitor Vaz da Silva

Índice. Introdução Tutorial 1: O Microsoft Access como Sistema de Gestão de Bases de Dados Relacionais... 35

Introdução ao PostgreSQL

Banco de Dados II. Triggers e Functions. Prof. Moser Fagundes. Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas

IMPLEMENTAÇÃO DE UM BANCO DE DADOS TEMPORAL UTILIZANDO O MODELO ORIENTADO A OBJETO TF-ORM

Tratamento de Exceções

Tarefa Orientada 17 Scripts

Oracle 10g: SQL e PL/SQL

ORACLE GEORASTER. André Cavalcante Hora Banco de Dados Geográficos Universidade Federal de Minas Gerais

Sistemas de Informação e Bases de Dados 2012/2013. Stored Procedures e Triggers

Época Normal 2º Teste Sem consulta

BANCO DE DADOS DISTRIBUÍDOS e DATAWAREHOUSING

Época Normal 2º Teste Sem consulta

Page 1. Prof. Constantino Jacob

Conceitos básicos. Funcionario SIAPE Nome Lotacao Cargo Salario Admissao

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

Informática I. Aula 8. Aula 8-25/09/2006 1

Aula de SQL Comandos DDL. André Luiz de Oliveira Eduardo Raul Hruschka

Material Teórico. Procedures, Functions, Exceptions e Triggers. Responsável pelo Conteúdo: Prof. Ms. Alexander Gobbato Albuquerque

MYSQL - PRIMEIROS COMANDOS CRIAÇÃCO DO BD E DAS TABELAS, INSERÇÃO E CONSULTA DE REGISTROS. create database [if not exists] <nome>

C A P I T U L O 10 F U N Ç Õ E S I N T E R N A S P H P P A R A B A N C O D E D A D O S

Treinamento PostgreSQL - Aula 03

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

Transcrição:

Gerenciamento de Dados e Informação Revisão OR & XML Fernando Fonseca Ana Carolina Robson Fidalgo

Considere o seguinte minimundo, correspondendo à parte dos dados de uma Academia de Ginástica e crie um modelo conceitual para uma aplicação OR utilizando o EERCASE Um Treinamento é caracterizado por Codigo (que deve ser considerado identificador), Nome e Objetivo 2

Academia de Ginástica (Cont.) Membros têm como propriedades Codigo (que deve ser considerado identificador), Idade, Altura, Nome e Medidas_Corporais, as quais representam respectivamente Torax, Coxas e Biceps (admitindo-se que nos dois últimos, esquerdo e direito têm mesmas medidas) Biceps 3

Academia de Ginástica (Cont.) Cada Membro só pode participar de um Treinamento, mas um Treinamento pode ter vários Membros participando dele Sobre o Treinamento, para cada Membro devem ser registrados também os Horarios de realização do mesmo, formados por Dia da semana e Hora, ocorrendo até cinco vezes por semana N 1 4

Academia de Ginástica (Cont.) N 1 Biceps 5

Crie um modelo lógico OR correspondente ao diagrama ER_Estendido da questão anterior para implementar no Oracle 11g, considerando Utilizar ref na solução, onde apropriado Relacionamento deve ser modelado com o uso de nested table Use VARRAY na solução, onde apropriado Defina método(função) para retornar nome de membro Defina método (procedure) para exibir dados de um membro Defina método (função) para retornar quantidade de membros inscritos num dado treinamento 6

Crie um modelo lógico OR correspondente ao diagrama ER_Estendido... (Cont.) Defina um método map para ordenar os treinamentos pelo nome Defina os object types necessários Defina as object tables correspondentes 7

Object types Criar inicialmente tipos que serão utilizados na definição de outros tipos Métodos devem ter a assinatura definida na criação do tipo e o corpo (body) implementado separadamente Métodos de objetos são definidos para o objeto corrente, o qual deve ser determinado por um comando SELECT apropriado para execução do método 8

Object types (Cont.) Medidas corporais de um Membro CREATE OR REPLACE TYPE tp_medidas_corporais AS OBJECT ( Toraxnumber, Coxa number, Biceps number); / 9

Object types (Cont.) Membros da Academia CREATE OR REPLACE TYPE tp_membros AS OBJECT ( Codigointeger, / Idade integer, Nome varchar2(20), Altura number(4,2), Medidas_Corporais tp_medidas_corporais, MEMBER FUNCTION getnome RETURN VARCHAR2, MEMBER PROCEDURE relatorio(self IN OUT NOCOPY tp_membros)); Evita realizar cópiade self melhora desempenho É padrãopara o parâmetro SELF o uso de IN OUT 10

Object types (Cont.) Corpos dos Métodos de Membrosda Academia CREATE OR REPLACE TYPE BODY tp_membros AS MEMBER FUNCTION getnome RETURN VARCHAR2 IS BEGIN RETURN nome; END; 11

Object types (Cont.) MEMBER PROCEDURE relatorio(self IN OUT NOCOPY tp_membros) IS BEGIN DBMS_OUTPUT.PUT_LINE('MEMBRO: ' TO_CHAR(codigo) ' ' nome ' ' TO_CHAR(altura)); DBMS_OUTPUT.PUT_LINE('MEDIDAS: ' TO_CHAR(Medidas_corporais.coxa) ' ' TO_CHAR(Medidas_corporais.biceps) ' ' TO_CHAR(Medidas_corporais.torax)); END; END; / Corpos dos Métodos de Membrosda Academia (Cont.) 12

Object types (Cont.) Horário de Treinamento CREATE OR REPLACE TYPE tp_horario AS OBJECT ( Dia varchar2(7), / Hora date); 13

Object types (Cont.) Horários de Treinamento de um dado Membro até cinco vezes por semana CREATE OR REPLACE TYPE tp_horarios AS VARRAY(5) of tp_horario; / 14

Object types (Cont.) Objeto para representar o relacionamento de Treinamento com Membros (1:N) CREATE OR REPLACE TYPE tp_relac AS OBJECT ( Membro Ref tp_membros, Aula tp_horarios ); / 15

Object types (Cont.) Conjunto de membros associados a um treinamento Relacionamento 1:N CREATE OR REPLACE TYPE tp_nt_relac AS TABLE OF tp_relac; / 16

Object types (Cont.) Treinamentos da Academia CREATE OR REPLACE TYPE tp_treinamento AS OBJECT ( CodigoInteger, Nome Varchar2(30), Objetivo Varchar2(30), Membros tp_nt_relac, MEMBER FUNCTION qtde_membros RETURN Integer, MAP MEMBER FUNCTION treinatonomereturn VARCHAR2); / Para ser usado na ordenação dos objetos Treinamento 17

Object types (Cont.) CREATE OR REPLACE TYPE BODY tp_treinamento AS MEMBER FUNCTION qtde_membros RETURN Integer IS BEGIN RETURN self.membros.count( ); END; Corpos dos Métodos de Treinamentos da Academia Conta os membros do objeto Treinamento corrente MAP MEMBER FUNCTION treinatonome RETURN VARCHAR2 IS p VARCHAR2(30) := nome; BEGIN RETURN p; END; END; / 18

Object tables Tabela de Membros CREATE TABLE tb_membros OF tp_membros (codigo PRIMARY KEY); Tabela de Treinamentos CREATE TABLE tb_treinamento OF tp_treinamento (codigo PRIMARY KEY) NESTED TABLE Membros STORE AS tb_listas_membros; 19

Dados Segunda 19h Quarta 7h Sexta 15h Codigo Idade Nome Altura Medida Torax Coxa 1 20 Ana 1,80 90 78 60 2 21 Roberto 1,90 100 60 85 3 19 Clara 1,75 92 75 80 Terça 8h Quinta 15h Sábado 10h Codigo Nome Objetivo 1 Condicionamento Físico Fortalecer músculos Biceps 2 Pilates Melhoria geral 3 Musculação Marombar 4 Dança Movimentação Membros Treinamento 20

Inserção de dados - Membros INSERT INTO tb_membros Values( tp_membros( 1, 20, 'Ana', 1.80, tp_medidas_corporais(90, 78, 60))); INSERT INTO tb_membros Values( tp_membros( 2, 21, 'Roberto', 1.90, tp_medidas_corporais(100, 60, 85))); INSERT INTO tb_membros Values( tp_membros( 3, 19, 'Clara', 1.75, tp_medidas_corporais(92, 75, 80))); 21

Inserção de dados - Treinamentos Insere referência do Membro INSERT INTO tb_treinamento VALUES (tp_treinamento(1, 'Condicionamento Físico', 'Fortalecer músculos', tp_nt_relac(tp_relac((select REF (C) FROM tb_membros C WHERE C.codigo= 1), tp_horarios( tp_horario('segunda', to_date('19:00', 'HH24:MI')), tp_horario('quarta', to_date('07:00', 'HH24:MI')), tp_horario('sexta', to_date('15:00', 'HH24:MI')))), tp_relac((select REF (C) FROM tb_membrosc WHERE C.codigo= 2), tp_horarios( tp_horario('terça', to_date('08:00', 'HH24:MI')), tp_horario('quinta', to_date('15:00', 'HH24:MI')), tp_horario('sábado', to_date('10:00', 'HH24:MI'))))))); Armazena hora no formato hh:mm 22

Inserção de dados Treinamentos ainda sem membros realizando Inicialização da nested table INSERT INTO tb_treinamento VALUES (tp_treinamento(2, 'Pilates', 'Melhoria geral', tp_nt_relac( ))); INSERT INTO tb_treinamento VALUES (tp_treinamento(3, 'Musculação', 'Marombar', tp_nt_relac( ))); INSERT INTO tb_treinamento VALUES (tp_treinamento(4, 'Dança', 'Movimentação', tp_nt_relac( ))); 23

Questões Escreva um único comando SQL para informar objetivo do treinamento 'Condicionamento Físico', além de, para cada membro nesse treinamento, informar nome, idade, altura, medidas corporais de torax, coxa e biceps e dias e horários da realização do treinamento (I) 24

Solução para a Questão (I) Acesso ao objeto a partir de sua referência Consulta à propriedade (atributo) de objeto Mostra hora no formato hh:mm SELECT c.objetivo, t.membro.nomeas Membro, t.membro.alturaas Altura, t.membro.idadeas Idade, t.membro.medidas_corporais.torax as Torax, t.membro.medidas_corporais.coxaas Coxa, t.membro.medidas_corporais.biceps as Biceps, d.diaas dia, to_char(d.hora, 'HH24:MI') as hora FROM tb_treinamento c, TABLE(c.membros) t, TABLE (t.aula) d WHERE c.nome = 'Condicionamento Físico'; Consulta à tabela aninhada Consulta ao componente Coleção (varray)da tabela aninhada 25

Resultado da Questão I no Oracle OBJETIVO MEMBRO ALTURA IDADE TORAX COXA BICEPS DIA HORA ------------------------- ------------------------------- --------------------------- ---------- -------- Fortalecer músculos Ana 1,8 20 90 78 60 Segunda 19:00 Fortalecer músculos Ana 1,8 20 90 78 60 Quarta 07:00 Fortalecer músculos Ana 1,8 20 90 78 60 Sexta 15:00 Fortalecer músculos Roberto 1,9 21 100 60 85 Terça 08:00 Fortalecer músculos Roberto 1,9 21 100 60 85 Quinta 15:00 Fortalecer músculos Roberto 1,9 21 100 60 85 Sábado 10:00 6 linhas selecionadas. 26

Questões (Cont.) Escreva um comando SQL para informar objetivo do treinamento 'Condicionamento Físico', além das informações de seus membros. Não utilizar na solução DEREF, COLUMN_VALUE, TABLE ou junção relacional(ii) 27

Solução para a Questão (II) SELECT c.objetivo, c.membros FROM tb_treinamentoc where c.nome = 'Condicionamento Físico'; 28

Resultado da Questão II no Oracle OBJETIVO MEMBROS(MEMBRO, AULA(DIA, HORA)) ----------------------------------------------------------------------------------------------------------------------- Fortalecer músculos TP_NT_RELAC(TP_RELAC(00002202082433C9435B31BC53E05015AC0702 18612433C9435B2EBC53E05015AC07021861, TP_HORARIOS( TP_HORARIO('Segunda', '01-NOV-15'), TP_HORARIO('Quarta', '01-NOV-15'), TP_HORARIO('Sexta', '01-NOV-15'))), TP_RELAC(00002202082433C9435B3 2BC53E05015AC070218612433C9435B2EBC53E05015AC07021861, TP_HORARIOS(TP_HORARIO('Terça', '01-NOV-15'), TP_HORARIO('Quinta', '01-NOV-15'), TP_HORARIO('Sábado', '01-NOV-15')))) 29

Questões (Cont.) Informe o nome do membro mais velho, utilizando o método getnome (III) 30

Solução para a Questão (III) Determinar qual o membro da academia mais velho (maior idade) e aplicar o método a ele select v.getnome( ) as Mais_Velho from tb_membros v where v.idade = (select max(t.idade) from tb_membros t); Determina o mais velho 31

Resultado da Questão III no Oracle Mais_Velho -------------------------------------------------------------- Roberto 32

Questões (Cont.) Gere o relatório com os dados do membro cujo codigo é 1, utilizando o método relatorio(iv). Para tanto é necessário definir um bloco PL para chamar a member procedure 33

Solução para a Questão (IV) DECLARE mbtp_membros; BEGIN /*Bloco PL/SQL para selecionar um membro e mostrar seusatributos*/ SELECT VALUE(m) INTO mbfrom tb_membrosm WHERE m.codigo= 1; mb.relatorio(); END; / Aciona o método relatorio Determina o objeto de codigo= 1 como o objeto corrente 34

Resultado da Questão IV no Oracle MEMBRO: 1 Ana 1.8 MEDIDAS: 78 60 90 35

Questões (Cont.) Determine o número de membros da academia que realizam o treinamento Condicionamento Físico, utilizando o método qtde_membros(v) Solução para a Questão(V) selectt.qtde_membros( ) as Membros from tb_treinamento t where t.nome = 'Condicionamento Físico'; 36

Resultado da Questão V no Oracle MEMBROS --------------- 2 37

Questões (Cont.) Ordene os objetos da tabela Treinamento utilizando o método treinatonome(vi) treinatonome mapeia os objetos em função do nome 38

Solução para a Questão (VI) select t.nome, t.codigo, t.objetivo from tb_treinamentot order by t.treinatonome( ); 39

Resultado da Questão VI no Oracle NOME CODIGO OBJETIVO ------------------------------ ---------- ------------------------------ Condicionamento Físico 1 Fortalecer músculos Dança 4 Movimentação Musculação 3 Marombar Pilates 2 Melhoria geral 40

Questões (Cont.) Insira o membro Clara no treinamento 'Pilates' com horários 4ª 8h e 6ª 11h (VII) 41

Solução para a Questão (VII) UPDATE tb_treinamento t set t.membros = tp_nt_relac (tp_relac( (SELECT REF (C) FROM tb_membros C WHERE C.codigo= 3), tp_horarios(tp_horario('quarta', to_date('08:00', 'HH24:MI')), tp_horario('sexta', to_date('11:00', 'HH24:MI'))))) WHERE t.nome = 'Pilates'; 42

Solução para a Questão (VII) Consulta tabela SELECT c.objetivo, t.membro.nomeas membro, t.membro.alturaas altura, t.membro.idadeas idade, t.membro.medidas_corporais.torax as torax, t.membro.medidas_corporais.coxaas Coxa, t.membro.medidas_corporais.bicepes as bicepes, d.diaas dia, to_char(d.hora, 'HH24:MI') as hora FROM tb_treinamento c, TABLE(c.membros) t, TABLE (t.aula) d WHERE c.nome = 'Pilates'; Treinamento: Pilates 43

Solução para a Questão (VII) Resposta da Consulta OBJETIVO MEMBRO ALTURA IDADE TORAX COXA BICEPES DIA HORA ------------------------------------- ---------- ---------- ---------- -------- ---------------- -------- Melhoria geral Clara 1.75 19 92 75 80 Quarta 08:00 Melhoria geral Clara 1.75 19 92 75 80 Sexta 11:00

Questões (Cont.) Execute um comando que gere um documento XML para cada nome de membro da academia (VIII) 45

Solução para a Questão (VIII) select sys_xmlgen(d.nome) from tb_membros d; Resultado da Questão VIII no Oracle SYS_XMLGEN(D.NOME) -------------------------- <?xml version="1.0"?> <NOME>Ana</NOME> <?xml version="1.0"?> <NOME>Roberto</NOME> <?xml version="1.0"?> <NOME>Clara</NOME> 46

Questões (Cont.) Considerando o esquema objeto-relacional apresentado, faça(ix): Usando XML Schema, crie a declaração para Treinamento com seus respectivos tipos complexos(a) Crie a DTD correspondente ao esquema acima(b) Crie um documento XML com uma instância decadatipodeelemento(c) 47

SoluçãoparaaQuestão(IX.a) <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10 /XMLSchema"> <xsd:element name=" treinamento"> <xsd:complextype> <xsd:sequence> <xsd:element name="nome" type="xsd:string"/> <xsd:element name="codigo" type="xsd:integer"/> <xsd:element name="objetivo" type="xsd:string"/> Treinamento Membros de Treinamento <xsd:element name="tp_relac" maxoccurs ="unbounded" > <xsd:complextype> <xsd:sequence> <xsd:element name="membro" type ="xsd:string"/> 48

Solução para a Questão(IX.a)(cont.) <xsd:element name=" Aula" maxoccurs ="5" > <xsd:complextype> <xsd:sequence> <xsd:element name="dia" type="xsd:string"/> <xsd:element name="hora" type="xsd:date"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:sequence> </xsd:complextype> </element> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema> Horários de Treinamento 49

Solução para a Questão(IX.b) <!ELEMENT academia(treinamento+) > <!ELEMENT treinamento (nome, codigo, objetivo, tp_relac+) > <!ELEMENT nome (#PCDATA) > <!ELEMENT codigo(#pcdata) > <!ELEMENT objetivo (#PCDATA) > <!ELEMENT tp_relac(membro, aula+) > <!ELEMENT membro (#PCDATA) > <!ELEMENT aula (dia, hora)> <!ELEMENT dia (#PCDATA) > <!ELEMENT hora (#PCDATA) > 50

Solução para a Questão(IX.c) <treinamento> <nome> Condicionamento Físico</nome> <codigo> 1 </codigo> <objetivo>fortalecer Músculos </objetivo> <tp_relac> <membro>0000220208f08025fa9a76ef76e04015ac0 702391CF08025FA9A7</membro> <aula> <dia> segunda </dia> <hora>19:00 </hora> </aula> </tp_relac> </treinamento> OID (Ref) do membro Ana 51

Questões (Cont.) Gere um documento XML a partir da consulta daquestãoi(x) 52

Solução para a Questão (X) set serveroutput on; declare ctx dbms_xmlgen.ctxhandle; result clob; begin Cadeias na consulta devem ser representadas por duasaspas simples --criar um novo contexto para a consulta SQL ctx:= dbms_xmlgen.newcontext('selectc.objetivo, t.membro.nomeas membro, t.membro.alturaas altura, t.membro.idadeas idade, t.membro.medidas_corporais.torax as torax, t.membro.medidas_corporais.coxaas Coxa, t.membro.medidas_corporais.biceps as biceps, d.diaas dia, to_char(d.hora, ''HH24:MI'') as hora FROM tb_treinamento c, TABLE(c.membros) t, TABLE (t.aula) d WHERE c.nome = ''Condicionamento Físico'''); 53

Solução para a Questão (X) (Cont.) --personalizaras tagsraiz e de entidade DBMS_XMLGEN.setRowsetTag(ctx,'Academia'); DBMS_XMLGEN.setRowTag(ctx,'Teinamento'); -- 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; / 54

Resultado da Questão X no Oracle <?xml version="1.0"?> <Academia> <Teinamento> <OBJETIVO>Fortalecer músculos</objetivo> <MEMBRO>Ana</MEMBRO> <ALTURA>1.8</ALTURA> <IDADE>20</IDADE> <TORAX>90</TORAX> <COXA>78</COXA> <BICEPS>60</BICEPS> <DIA>Segunda</DIA> <HORA>19:00</HORA> </Teinamento> 55

Resultado da Questão X no Oracle (Cont.) <Teinamento> <OBJETIVO>Fortalecer músculos</objetivo> <MEMBRO>Ana</MEMBRO> <ALTURA>1.8</ALTURA> <IDADE>20</IDADE> <TORAX>90</TORAX> <COXA>78</COXA> <BICEPS>60</BICEPS> <DIA>Quarta</DIA> <HORA>07:00</HORA> </Teinamento> 56

Resultado da Questão X no Oracle (Cont.) <Teinamento> <OBJETIVO>Fortalecer músculos</objetivo> <MEMBRO>Ana</MEMBRO> <ALTURA>1.8</ALTURA> <IDADE>20</IDADE> <TORAX>90</TORAX> <COXA>78</COXA> <BICEPS>60</BICEPS> <DIA>Sexta</DIA> <HORA>15:00</HORA> </Teinamento> 57

Resultado da Questão X no Oracle (Cont.) <Teinamento> <OBJETIVO>Fortalecer músculos</objetivo> <MEMBRO>Roberto</MEMBRO> <ALTURA>1.9</ALTURA> <IDADE>21</IDADE> <TORAX>100</TORAX> <COXA>60</COXA> <BICEPS>85</BICEPS> <DIA>Terça</DIA> <HORA>08:00</HORA> </Teinamento> 58

Resultado da Questão X no Oracle (Cont.) <Teinamento> <OBJETIVO>Fortalecer músculos</objetivo> <MEMBRO>Roberto</MEMBRO> <ALTURA>1.9</ALTURA> <IDADE>21</IDADE> <TORAX>100</TORAX> <COXA>60</COXA> <BICEPS>85</BICEPS> <DIA>Quinta</DIA> <HORA>15:00</HORA> </Teinamento> 59

Resultado da Questão X no Oracle (Cont.) <Teinamento> <OBJETIVO>Fortalecer músculos</objetivo> <MEMBRO>Roberto</MEMBRO> <ALTURA>1.9</ALTURA> <IDADE>21</IDADE> <TORAX>100</TORAX> <COXA>60</COXA> <BICEPS>85</BICEPS> <DIA>Sábado</DIA> <HORA>10:00</HORA> </Teinamento> </Academia> 60

Questões (Cont.) Gere um documento XML a partir da consulta SELECT* FROM tb_treinamentos;(xi) Crie um XML Schema para descrever apropriadamente o documento gerado pela questão XI(XII) 61

Solução para a Questão (XI) 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_treinamento'); --personalizar as tagsraiz e de entidade DBMS_XMLGEN.setRowsetTag(ctx,'Academia'); DBMS_XMLGEN.setRowTag(ctx,'Teinamento'); -- 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

Resultado da Questão XI no Oracle <?xml version="1.0"?> <Academia> <Teinamento> <CODIGO>1</CODIGO> <NOME>Condicionamento Físico</NOME> <OBJETIVO>Fortalecer músculos</objetivo> <MEMBROS> <TP_RELAC> <MEMBRO>0000220208F08025FA9A76EF76E04015AC0702391CF08025FA9A7 3EF76E04015AC0702391C</MEMBRO> <AULA> <TP_HORARIO> <DIA>Segunda</DIA> <HORA>01-JAN-14</HORA> </TP_HORARIO> Não exibe a hora porque não foi formatado para HH24:MI OID (Ref) do membro Ana Horários dos treinamentos de Ana 63

Resultado da Questão XI no Oracle (Cont.) <TP_HORARIO> <DIA>Quarta</DIA> <HORA>01-JAN-14</HORA> </TP_HORARIO> <TP_HORARIO> <DIA>Sexta</DIA> <HORA>01-JAN-14</HORA> </TP_HORARIO> </AULA> </TP_RELAC> <TP_RELAC> <MEMBRO>0000220208F08025FA9A77EF76E04015AC0702391CF08025FA9A7 3EF76E04015AC0702391C</MEMBRO> <AULA> <TP_HORARIO> <DIA>Terça</DIA> 64

Resultado da Questão XI no Oracle (Cont.) <HORA>01-JAN-14</HORA> </TP_HORARIO> <TP_HORARIO> <DIA>Quinta</DIA> <HORA>01-JAN-14</HORA> </TP_HORARIO> <TP_HORARIO> <DIA>Sábado</DIA> <HORA>01-JAN-14</HORA> </TP_HORARIO> </AULA> </TP_RELAC> </MEMBROS> </Teinamento> 65

Resultado da Questão XI no Oracle (Cont.) <Teinamento> <CODIGO>2</CODIGO> <NOME>Pilates</NOME> <OBJETIVO>Melhoria geral</objetivo> <MEMBROS> <TP_RELAC> <MEMBRO>0000220208F08025FA9A78EF76E04015AC0702391CF08025FA9A7 3EF76E04015AC0702391C</MEMBRO> <AULA> <TP_HORARIO> <DIA>Quarta</DIA> <HORA>01-JAN-14</HORA> </TP_HORARIO> 66

Resultado da Questão XI no Oracle (Cont.) <TP_HORARIO> <DIA>Sexta</DIA> <HORA>01-JAN-14</HORA> </TP_HORARIO> </AULA> </TP_RELAC> </MEMBROS> </Teinamento> 67

Resultado da Questão XI no Oracle (Cont.) <Teinamento> <CODIGO>3</CODIGO> <NOME>Musculação</NOME> <OBJETIVO>Marombar</OBJETIVO> <MEMBROS/> </Teinamento> <Teinamento> <CODIGO>4</CODIGO> <NOME>Dança</NOME> <OBJETIVO>Movimentação</OBJETIVO> <MEMBROS/> </Teinamento> </Academia> Não há membros cadastradospara esses treinamentos 68

Solução para a Questão (XII) <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/xmlschema"> <xsd:element name="academia"> <xsd:complextype> <xsd:element name="treinamento" maxoccurs ="unbounded" > <xsd:complextype> <xsd:sequence> <xsd:element name="codigo" type="xsd:integer"/> <xsd:element name="nome" type="xsd:string"/> <xsd:element name="objetivo" type="xsd:string"/> 69

Solução para a Questão (XII) (Cont.) <xsd:element name="membros" maxoccurs ="unbounded" > <xsd:complextype> <xsd:element name="tp_relac" maxoccurs ="unbounded" > <xsd:complextype> <xsd:sequence> <xsd:element name="membro" type="xsd:string"/> <xsd:element name="aulas" > <xsd:complextype> <xsd:element name="tp_horario" maxoccurs ="5" > <xsd:complextype> 70

Solução para a Questão (XII) (Cont.) <xsd:sequence> <xsd:element name="dia" type="xsd:date"/> <xsd:element name="hora" type="xsd:date"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:complextype> </xsd:element> </xsd:sequence> </xsd:complextype> 71

Solução para a Questão (XII) (Cont.) </xsd:element> </xsd:complextype> </xsd:element> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:complextype> </xsd:element> </xsd:schema> 72

Questões (Cont.) Insira o horário Sábado 10h para o treinamento Condicionamento Físico (Codigo = 1) de Ana ( Codigo = 1) (XIII) 73

Solução para a Questão (XIII) Declare n tp_horarios; i integer; Begin Select d.aula into n from tb_treinamento t, table (t.membros) d where t.codigo = 1 AND d.membro.codigo = 1; n.extend; i := n.count; n(i) := tp_horario('sábado', to_date('10:00', 'HH24:MI')); Update table ( select t.membros from tb_treinamento t where t.codigo = 1) p set p.aula = n where p.membro.codigo =1; End; / 74

Questões (Cont.) Informar nome e horários do treinamento realizado por Ana (Codigo = 1) (XIV) SELECTc.nome,d.diaASdia,to_char(d.hora, 'HH24:MI') AS hora FROM tb_treinamento c, TABLE(c.membros) t, TABLE (t.aula) d WHERE t.membro.codigo = 1; Resultado da Questão XIV no Oracle (Cont.) NOME DIA HORA Condicionamento Físico Segunda 19:00 Condicionamento Físico Quarta 07:00 Condicionamento Físico Sexta 15:00 Condicionamento Físico Sábado 10:00 75

Questões (Cont.) Gere um documento XML com o resultado da consulta da Questão XIV (XV) 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.nome, d.dia AS dia, to_char(d.hora, ''HH24:MI'') AS hora FROMtb_treinamentoc, TABLE(c.membros) t, TABLE (t.aula) d WHERE t.membro.codigo = 1 '); -- 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; / 76

Resultado da Questão XV no Oracle <?xml version="1.0"?> <ROWSET> <ROW> <NOME>Condicionamento Físico</NOME> <DIA>Segunda</DIA> <HORA>19:00</HORA> </ROW> <ROW> <NOME>Condicionamento Físico</NOME> <DIA>Quarta</DIA> <HORA>07:00</HORA> </ROW> <ROW> 77

Resultado da Questão XV no Oracle (Cont.) <NOME>Condicionamento Físico</NOME> <DIA>Sexta</DIA> <HORA>15:00</HORA> </ROW> <ROW> <NOME>Condicionamento Físico</NOME> <DIA>Sábado</DIA> <HORA>10:00</HORA> </ROW> </ROWSET> 78