programas associados aos tipos que fazem computações e podem ter acesso aos atributos do tipo...

Post on 18-Apr-2015

124 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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