Conceitos de SGBD Objeto-Relacional Oracle 10g [2]

Slides:



Advertisements
Apresentações semelhantes
O Comando DROP INDEX Para eliminar um índice definido sobre uma tabela, utilize: Drop Index on ; Ex: No Access: Drop Index X on.
Advertisements

I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Estudo de Caso, modelo Oracle 10g
Gerenciamento de Dados e Informação Estudo de caso – PL/SQL
JDBC Java Dababase Connectivity Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008.
Prof. Alessandro J. de Souza
Java Conexão com Banco de Dados
APLICAÇÕES DE LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS ACESSO A BANCO DE DADOS COM O JDBC Prof. Thiago Pereira Rique
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
Maurício Edgar Stivanello
Sistema Gerenciador de Banco de Dados SGBD
Sistema Gerenciador de Banco de Dados SGBD
Linguagens de Programação Orientadas a Objetos
1 MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE) BREVE HISTÓRICO CARACTERÍSTICAS CONCEITOS DE PROGRAMAÇÃO ORIENTADA A OBJETOS MODELAGEM DE ANÁLISE E DE.
Banco de Dados Objetos Relacionais
Introdução a JDBC Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Banco de dados Profª Kelly Medeiros.
Java & Bancos de Dados Universidade Salgado de Oliveira Goiânia
Java :: Persistência de Dados
Acesso a Base de Dados JDBC Trabalho Realizado por:
Equipe de monitoria Aula prática 4.  Tipos  Tabela de Objetos  Herança  Métodos  Referências  Coleções  Composição de coleções  Conectividade.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Equipe de monitoria Aula prática 4
Equipe de monitoria Aula prática 4
Bancos de Dados Espaciais
Vânia Maria Ponte Vidal
Tópicos de Sistemas de Informação A Carlos Oberdan Rolim Ciência da Computação.
Monitoria GDI Aula Prática
Anexo A. JDBC  Conjunto de interfaces e classes java que faz envio de consultas para um banco de dados.  Objetos(tipos)  Conexão (Driver e Connection)
(Linguagem de Consulta Estruturada)
Equipe de monitoria Aula prática 3.  Caso de estudo  Igualando situações  Cursor  Function  Procedure  Trigger  Package  Surpresa...
Equipe de monitoria Aula prática 4
P ROGRAMAÇÃO Prof.: Bruno Rafael de Oliveira Rodrigues.
Primeira aula de PL/SQL Parte II
Especialização em Tecnologia da Informação
Oracle 9i: SQL e PL/SQL Bruno Celso Cunha de Freitas
Conceitos de SGBD Objeto-Relacional Oracle 10g [1]
III – Oracle10g Apontadores – Tipo de Dado (REF).
III – O Modelo OR Estudo de Caso, modelo Oracle 10g.
III – Oracle10g Funções que Manipulam Apontadores.
III – Oracle 10g Herança.
SEQUENCE, PROCEDURE, FUNÇÃO, TRIGGER
Desenvolvendo um script SQL
JDBC Java Database Connectivity. JDBC Especificação para uso de base de dados em aplicações e applets JAVA; API para uso de drivers JDBC; Compatível com.
Desnvolvimento de Projetos e Aplicações Web Ceça Moraes – Ceça.
Baseado no material do Professor Raul Paradeda
Configuração do Ambiente de programação
PostGres: Um Banco de Dados Orientado a Objetos
Programação para Web Unidade 06 – Java Beans e BDs Prof.: Henrique Santos.
Projeto de Sistemas de Informação Prof. Schneider Oracle Object-Relational.
Triggers (Gatilhos) Professor Esp. Diego André Sant’Ana
SCC Bancos de Dados e Suas Aplicações
Ricardo Ferreira Schiavo
©Silberschatz, Korth and Sudarshan (modificado)9.1.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
III – Oracle 9i Indexação. Índices Baseados em Funções É um índice baseado no valor de retorno de uma expressão ou função –A função pode ser um método.
Java Conexão com Baco de dados Saulo Bazzi Oberderfer Fonte:
III - Oracle9i Apontadores – Tipo de Dado (REF). Identificador de Objeto A todo objeto de uma “object table” é associado um OID (“Object IDentifier”)
Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina.
Equipe de monitoria Aula prática 4.  Tipos  Tabela de Objetos  Herança  Métodos  Referências  Coleções  Composição de coleções  Conectividade.
JDBC Java Database Connectivity docs/guide/jdbc/getstart/introTOC.doc.html.
Banco de Dados Relacional Objeto-
III – O Modelo OR Estudo de Caso, modelo Oracle9i.
Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc.
Desenvolvimento WEB II Aula 3 – Conexão com o Banco de Dados
Banco de Dados Relacionais. Tabelas DB Relacionais são baseados em tabelas As tabelas armazenam registros Cada registro ocupa uma linha da tabela Registros.
Programação para Internet Aula 11 SQL (Introdução a linguagem, comandos de modificação: Create, Drop, Alter, Insert, Delete, Update)
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
2ª Aula Prática O-R Fernando Fonseca.
Transcrição da apresentação:

Conceitos de SGBD Objeto-Relacional Oracle 10g [2]

Métodos

Métodos Programas associados aos tipos que fazem computações e podem ter acesso aos atributos do tipo Tipos de métodos Member Static Constructor Comparison (Map e Order)

Member Function Métodos que possuem acesso aos dados da instância do objeto Self - representa a instância do tipo no qual o método é atualmente chamado Na declaração de um tipo são definidas as assinaturas dos métodos O corpo dos métodos deve ser criado em alguma linguagem de programação (PL/SQL, Java, C++)

Exemplo CREATE TYPE T_PESSOA AS OBJECT ( NOME VARCHAR2(30), TELEFONE VARCHAR2(20), IDADE NUMBER(2), MEMBER FUNCTION GET_IDADE_PLUS RETURN NUMBER ); CREATE OR REPLACE TYPE BODY T_PESSOA AS MEMBER FUNCTION GET_IDADE_PLUS (INC NUMBER) RETURN NUMBER IS BEGIN RETURN SELF.IDADE + INC; END GET_IDADE_PLUS; END;

Constructor Method Método que cria uma nova instância para o objeto, atribuindo valores aos seus atributos. Trabalha com dados globais do tipo de objeto e não com a instância (não se utiliza a palavra-chave SELF) Todo object type possui um método construtor, que é implícito e definido pelo sistema O nome do método construtor é o mesmo do object type

Exemplo CREATE TYPE Customer_typ AS OBJECT ( id NUMBER, name VARCHAR2(20), phone VARCHAR2(30) ); cust = Customer_typ(103, 'Ravi', '555-1212')

Comparison Methods Valores de tipos de dados primitivos como CHAR ou REAL possuem uma ordem predefinida, permitindo compará-los Object type possui múltiplos atributos de diferentes tipos de dados, não possuindo um eixo definido de comparação Map Order

Map Method Permite comparar objetos, mapeando as instâncias dos objeto sem um dos tipos escalares DATE, NUMBER, VARCHAR2

Exemplo CREATE TYPE Retangulo_tipo AS OBJECT ( larg NUMBER, comp NUMBER, MAP MEMBER FUNCTION area RETURN NUMBER ); CREATE TYPE BODY Retangulo_tipo AS MAP MEMBER FUNCTION area RETURN NUMBER IS BEGIN RETURN larg * comp; END area; END;

Order Function Realiza comparações object-to-object É função que possui um parâmetro declarado para outro objeto do mesmo tipo e retorna < 0, caso o objeto SELF seja menor que o objeto passado como argumento 0, caso sejam iguais > 0, caso o objeto SELF seja maior que o objeto passado como argumento

Manipulação de Consultas

Comando REF REF - Retorna referência OID(object id) a uma instância da object table Um objeto do tipo REF encapsula uma referência para um “row object” de um tipo de objeto especificado; O valor de um objeto do tipo REF é um “ponteiro lógico” para um row object.

Comando REF (exemplo) Cadastre um sócio no banco e a relacione com o endereço cujo código é 1, supondo que o endereço foi criado previamente. INSERT INTO endereco (codigo_end, rua, cep, numero, bairro) VALUES (1,'a','123',2222,'espinheiro'); INSERT INTO socio (codigo, rg, nome, ref_endereco, tipo_socio, datacadastro)VALUES (123456789,'6396327','coxinha', (select REF(e) from endereco e where e.codigo_end = 1),'titular',to_date('14/08/1986','dd/mm/yyyy'));

Comando REF (exercício) Selecionar todos os atributos de endereço que possuem alguma relação com sócio

Comando DREF DEREF - Retorna instância de objeto correspondente ao REF O operador DEREF executa a função oposta de REF — recebe um valor de referência e retorna o valor de um “row object”. O DEREF toma como argumento o OID gerado para uma referência.

Comando DREF (exemplo) Faça uma consulta que retorno o endereço do socio com codigo 123456789 select DEREF(s.ref_endereco) from socio s where s.codigo = 123456789;

Comando DREF (exercício) Mostre todas as informações do endereço cujo código está associado ao sócio com rg igual a 6396327.

SELECT * FROM socio s WHERE s.ref_endereco IS DANGLING; Comando Dangling Verifica a validade de uma referência Exemplo: Mostre todos os socios que possuem endereços com referências inválidas. SELECT * FROM socio s WHERE s.ref_endereco IS DANGLING;

Comando Dangling (exercício) Mostre todos os sócios que possuem endereços válidos e que moram no espinheiro.

Comando WITH ROWID Melhor desempenho, pois fornece acesso direto ao objeto Exemplo: Tabela tb_socio_exemplo com referencia a endereço create table tb_socio_exemplo of tp_socio( codigo primary key, nome not null, ref_endereco with rowid references endereco );

Comando WITH ROWID (exercício) Faça uma inserção na tabela acima com um endereço válido. Após a inserção tente remover o endereço.

Coleções de coleções

Coleção de coleções - Nested com nested TURMA 1 n ALUNO PROFESSOR 1 n

Coleção de coleções - Nested com nested CREATE TYPE PROFESSOR_TYPE AS OBJECT ( NOME VARCHAR2(15), DISCIPLINA VARCHAR2(15) ); //Nested professor_type que será um atributo da tabela //aluno CREATE TYPE NT_PROF_T AS TABLE OF PROFESSOR_TYPE;

Coleção de coleções - Nested com nested //Type aluno possue um conjunto de professores CREATE TYPE ALUNO_TYPE AS OBJECT( MATRICULA NUMBER, PROFESSORES NT_PROF_T ); //Nested de aluno, o qual já possue um conjunto como //atributo CREATE TYPE NT_ALUNO_T AS TABLE OF ALUNO_TYPE;

Coleção de coleções - Nested com nested CREATE TYPE TURMA_TYPE AS OBJECT ( CODIGO VARCHAR2(3), SALA VARCHAR2(3), ALUNOS NT_ALUNO_T ); CREATE TABLE TURMA_TAB OF TURMA_TYPE ( CODIGO PRIMARY KEY ) NESTED TABLE ALUNOS STORE AS ALUNOS_T (NESTED TABLE PROFESSORES STORE AS PROF_T);

Coleção de coleções - Nested com nested Sintaxe para inserção de aluno e professor INSERT INTO TURMA_TAB VALUES ('I5A', ‘D005', NT_ALUNO_T( ALUNO_TYPE(210141500, NT_PROF_T( PROFESSOR_TYPE(‘Manoel',‘Sistemas Digitais'), PROFESSOR_TYPE(‘Ruy',‘Logica') ) ),

Coleção de coleções - Nested com nested Sintaxe para inserção de aluno e professor (continuação) ALUNO_TYPE(210141750, NT_PROF_T( PROFESSOR_TYPE('Silvio','HFC'), PROFESSOR_TYPE('Hermano','PLP') ) )--nt_aluno_t );--insert

Coleção de coleções - Nested com nested Sintaxe para inserção apenas de professor INSERT INTO TABLE( SELECT A.PROFESSORES FROM TABLE ( SELECT FROM TURMA_TAB T WHERE T.CODT.ALUNOS IGO = 'I5A‘ ) A WHERE A.MATRICULA = 210141750) VALUES (‘Fernando’,’GDI’);

Coleção de coleções - Nested com nested Atualizando o professor da disciplina Projetão (PD). UPDATE TABLE( SELECT A.PROFESSORES FROM TABLE( SELECT T.ALUNOS FROM TURMA_TAB T WHERE T.CODIGO = 'I5A‘ ) A WHERE A.MATRICULA = 210141500 ) P SET VALUE(P)= PROFESSOR_TYPE('Jacques','PD') WHERE P.DISCIPLINA='PD';

Coleção de coleções - Nested com nested Consulta em tabela aninhada SELECT P.NOME, P.DISCIPLINA FROM TURMA_TAB T, TABLE(T.ALUNOS) A, TABLE(A.PROFESSORES) P WHERE T.CODIGO = ‘I5A’ ;

Coleção de coleções - Nested com varray ALUNO 1 matricula n PROFESSOR telefone nome diciplina

Coleção de coleções - Nested com varray Types

Coleção de coleções - Nested com varray Table CREATE TABLE tb_aluno OF aluno_tp ( CONSTRAINT pk_aluno PRIMARY KEY (matricula) ) NESTED TABLE conj_professores STORE AS prof_nt; / commit;

Coleção de coleções - Nested com varray Insert com e sem elementos na nested ;

Coleção de coleções - Nested com varray Consulta

Coleção de coleções - Varray com varray Um computador possui vários componentes; Cada existem várias marcas diferentes para um componente; Cada marca possui um preço diferente por componente. CREATE OR REPLACE TYPE tp_marca AS OBJECT ( nome VARCHAR2(20), preco NUMBER); / CREATE OR REPLACE TYPE vr_marca AS VARRAY(10) OF tp_marca; CREATE OR REPLACE TYPE tp_componente AS OBJECT ( descricao VARCHAR2(40), marcas vr_marca); CREATE OR REPLACE TYPE vr_componente AS VARRAY(30) OF tp_componente; CREATE OR REPLACE TYPE tp_computador AS OBJECT ( descricao VARCHAR2(50), componentes vr_componente ); CREATE TABLE tb_computador OF tp_computador(CONSTRAINT pk_computador PRIMARY KEY (id));

Coleção de coleções - Varray com varray INSERT INTO tb_computador VALUES( 1, 'Computador ID#1', vr_componente( tp_componente( 'Processador', vr_marca( tp_marca('Intel',1200), tp_marca('AMD', 999) )), tp_componente( 'Placa de Video', vr_marca( tp_marca('NVIDIA', 800), tp_marca('ATI', 700) ))));

Coleção de coleções - Varray com varray SELECT C.descricao, m.nome, m.preco from tb_computador T, TABLE(T.componentes) C, TABLE(C.marcas) M; DESCRICAO NOME PRECO ---------------------------------------- -------------------- ---------- Processador Intel 1200 Processador AMD 999 Placa de Video NVIDIA 800 Placa de Video ATI 700

Conceitos de Conectividade JDBC

JDBC Conjunto de interfaces e classes java que faz envio de consultas para um banco de dados. Objetos(tipos) Conexão (Driver e Connection) SQL para JDBC Midias

JDBC - Tipos Driver – interface utilizada por toda aplicação que precise acessar um BD. Connection – conexão com BD. Obtida á partir de um Driver já carregado. Statement e PreparedStatement –. interfaces que representam as consultas. ResultSet – interface que recebe o resultado de uma consulta.

JDBC - Driver Essencial (carregamento obrigatório) para estabelecer uma conexão com BD. Class.forName (String driver_name) ; -> determina qual drive será usado. Esse comando registra o driver. *no DriverManager (classe responsável pelo gerenciamento de drivers carregados). *driver_name fornecido pelo provedor do BD. getConnection (String url_driver, String user_bd, String password_bd) ; -> método que acessa a tabela de drivers (DriverManager) com a url (do driver) passada e depois cria e retorna uma conexão com o BD.

JDBC - Driver e Connection String user = "eq01"; String password = "equipe1"; String url_driver = "jdbc:oracle:thin:@itapissuma.cin.ufpe.br:1521:dbdisc"; Class.forName("oracle.jdbc.driver.OracleDriver"); Como dito anteriormente, obtemos uma conexão SOMENTE APÓS registrar um driver no DriveManager. Connection connection = DriveManager.getConnection(url_driver, user, password) ;

JDBC - Driver e Connection try { Class.forName("oracle.jdbc.driver.OracleDriver"); con = DriverManager.getConnection(url, user, password); } catch (SQLException e) { JOptionPane.showMessageDialog(null, e.getMessage()); } connection.commit( ); connection.rollback( ); connection.close( ); *aconteceu comigo. Fiz várias consultas e travou depois de um tempo

JDBC - Statement Statement -> armazenam consultas que sempre são compiladas antes de serem executadas. * connection.createStatement(); - retorna um Statement. dml->linguagem de modelagem (ins,del,upd) ddl ->linguagen de definicao(create, drop) * statement.executeUpdate(String sql_dml_ddl); - realisa uma operação e retorna a quantidade de linhas modificadas. *statement.executeQuery(String sql_select); -realisa uma operação que retorna um ResultSet.

JDBC - Statement e ResultSet Statement stmt = connection.createStatement(); String sql1 = “SELECT * FROM FROM Fornecedor”; ResultSet rs = stmt.executeQuery(sql1); while(rs.next()){ nome = rs.getString(“NOME”); } *** rs.getTYPE_NAME(); String sql2 = “INSERT INTO Fornecedor VALUES” + “ (‘123456-7’, ’Info’ )”; stmt.executeUpdate(sql2);

JDBC - PreparedStatement - é um Statement que é compilado apenas na primeira execução. * connection.prepareStatement(String sql); -retorna um PreparedStatement. * **setType_name(); -seta valores onde existe ‘?’ no sql criado. public static final String INSERIR_FORNECEDOR_1_FONE = “INSERT INTO tb_fornecedor (nome, cnpj, array_tp_fone, ” + “nt_pedido_fornecedor, nt_produto ) VALUES (?,?,” + “array_tp_fone(tp_telefone(?,?)), nt_pedido_fornecedor(), nt_produto);” ;

JDBC - PreparedStatement

JDBC - PreparedStatement

JDBC - PreparedStatement

Transformar um arquivo entrada em um stream de entrada

JDBC - Mídia