1 / 54

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

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.

floyd
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Métodos

  3. Métodos • Programasassociadosaostiposquefazemcomputações e podemteracessoaosatributos do tipo • Tipos de métodos • Member • Static • Constructor • Comparison (Map e Order)

  4. Member Function • Métodosquepossuemacessoaos dados dainstância do objeto • Self - representa a instância do tipo no qual o método é atualmentechamado • Na declaração de um tiposãodefinidas as assinaturas dos métodos • O corpo dos métodosdeve ser criadoemalgumalinguagem de programação (PL/SQL, Java, C++)

  5. 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;

  6. Constructor Method • Métodoquecriauma nova instânciapara o objeto, atribuindovaloresaosseusatributos. 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étodoconstrutor, que é implícito e definidopelosistema • O nome do métodoconstrutor é o mesmo do object type

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

  8. Comparison Methods • Valores de tipos de dados primitivoscomo CHAR ou REAL possuemumaordempredefinida, permitindocompará-los • Object type possuimúltiplosatributos de diferentestipos de dados, nãopossuindo um eixodefinido de comparação • Map • Order

  9. Map Method • Permitecompararobjetos, mapeando as instâncias dos objetosem um dos tiposescalares DATE, NUMBER, VARCHAR2

  10. 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;

  11. Order Function • Realizacomparações object-to-object • É funçãoquepossui um parâmetrodeclaradoparaoutroobjeto do mesmotipo e retorna • < 0, caso o objeto SELF sejamenorque o objetopassadocomoargumento • 0, casosejamiguais • > 0, caso o objeto SELF sejamaiorque o objetopassadocomoargumento

  12. Manipulação de Consultas

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

  14. 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', (selectREF(e) fromendereco e wheree.codigo_end = 1),'titular',to_date('14/08/1986','dd/mm/yyyy'));

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

  16. 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 “rowobject”. O DEREF toma como argumento o OID gerado para uma referência.

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

  18. 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.

  19. 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;

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

  21. Comando WITH ROWID • Melhor desempenho, pois fornece acesso direto ao objeto • Exemplo: • Tabela tb_socio_exemplo com referencia a endereço createtabletb_socio_exemplooftp_socio( codigoprimarykey, nome notnull, ref_enderecowithrowidreferencesendereco );

  22. 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.

  23. Coleções de coleções

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

  25. Coleção de coleções - Nested com nested CREATE TYPE PROFESSOR_TYPE AS OBJECT ( NOME VARCHAR2(15), DISCIPLINA VARCHAR2(15) ); //Nested professor_typequeserá um atributodatabela //aluno CREATE TYPE NT_PROF_T AS TABLE OF PROFESSOR_TYPE;

  26. Coleção de coleções - Nested com nested //Type alunopossue 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;

  27. 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);

  28. 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') ) ),

  29. 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

  30. 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’);

  31. 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';

  32. 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’ ;

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

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

  35. 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; /

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

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

  38. 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));

  39. 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) ))));

  40. 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

  41. Conceitos de Conectividade JDBC

  42. 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

  43. 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.

  44. 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.

  45. 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) ;

  46. 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

  47. 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.

  48. 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);

  49. JDBC - PreparedStatement • 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);” ;

  50. JDBC - PreparedStatement

More Related