programas associados aos tipos que fazem computações e podem ter acesso aos atributos do tipo...
Post on 18-Apr-2015
124 Views
Preview:
TRANSCRIPT
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 ASMAP 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.
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çocreate 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
ALUNO PROFESSOR
1
n
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 //atributoCREATE 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‘
) AWHERE 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 ) PSET 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.DISCIPLINAFROM TURMA_TAB T, TABLE(T.ALUNOS) A,
TABLE(A.PROFESSORES) P WHERE T.CODIGO = ‘I5A’ ;
Coleção de coleções - Nested com varray
ALUNO
PROFESSOR
1
n
telefone
nome diciplina
matricula
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 1200Processador AMD 999Placa de Video NVIDIA 800Placa de Video ATI 700
Conceitos de ConectividadeJDBC
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
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
top related