Prof. José Fernando Rodrigues Júnior Pacotes Material original: Profa. Elaine Parros Machado de Sousa SCC0141 - Bancos de Dados e Suas Aplicações.

Slides:



Advertisements
Apresentações semelhantes
Capítulo 1: SQL-PSM (Persistent Stored Modules)
Advertisements

III – Oracle 9i Coleções.
Estudo de Caso, modelo Oracle 10g
Gerenciamento de Dados e Informação Estudo de caso – PL/SQL
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
Triggers Marilde Santos.
Sequences Marilde Santos. O que são Sequences? Valores sequenciais podem ser gerados automaticamente pelo Oracle com o uso de sequences. A sequence gera.
Manipulação de Arquivos de Dados
SQL Exercícios de Revisão Profa. Sandra de Amo Programa de Pós-graduação em Ciência da Computação – UFU
VHDL Very High Speed Integrated Circuit Hardware Description Language Prof. Eduardo Todt 2008.
2008 LCG/UFRJ. All rights reserved. 1 Standard Template Library STL Claudio Esperança Paulo Roma Cavalcanti.
SCC Bancos de Dados e Suas Aplicações
PL/SQL (Procedural Language/Structured Query Language)
SCC Bancos de Dados e Suas Aplicações
Procedimentos e Funções
SCC Bancos de Dados e Suas Aplicações
A.4. Trabalhando com elementos de biblioteca STL – Standard Template Libraby Disponibiliza um conjunto de classes templates, provendo algoritmos eficientes.
Ronaldo Celso Messias Correia
Html5- Desenvolvendo Aplicações. Html5- Introdução a SQL Métodos OpenDatabase (utilizado para criar ou abrir uma Base de Dados); Transaction (permite.
FORTRAN 90 Denise Yumi Takamura.
SQL Procedural Junho/2006.
SQL procedural – parte 2.
Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada.
BDOO. Modelos tradicionais (relacional, rede e hierárquico) : aplicações tradicionais Novas aplicações para : Sistemas CAD Manufatura Experimentos científicos.
Funções de Linha 17/04/06. Funções de Linha Gerar ou construir novo valor não existente na tabela inicial. Valor construído a partir de dados de uma ou.
Introdução à Consulta 24/3/06. Categorias de comandos DDL : estruturação de objetos de BD Ex. create table, drop index, alter table... DML: manipulação.
Funções de Linha 24/04/06. Funções de Linha Gerar ou construir novo valor não existente na tabela inicial. Valor construído a partir de dados de uma ou.
SQL-3. Novo contexto e necessidade de : Manipular imagens Outros tipos de dados além de texto e números Recuperação de dados mais complexos Níveis distintos.
Objeto de BD: visão Há 2 tipos de tabelas Tabela base
Formação de Administradores de Redes Linux LPI – level 1 SENAC TI Fernando Costa SQL (Structure Query Language)
Recursividade Estrutura de Dados.
Marco Antonio Montebello Júnior
Sistemas de Informação Prof. Me. Everton C. Tetila Modelo de dados relacional Banco de Dados I.
Stored Procedure, Function and Trigger
Introdução Ciência da Computação estudo de algoritmos –ÊNFASE ao estudo de DADOS armazenamento manipulação refinamento (a partir de dados cru) estrutura.
1 Seja o resultado de um experimento aleatório. Suponha que uma forma de onda é associada a cada resultado.A coleção de tais formas de ondas formam um.
Transporte Escolar Fluvial
Usando Java no Oracle Por Edson Almeida Junior
Ada.
Instanciação em VHDL.
Exercícios de revisão.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 30 (1) Empacotamento de Dados em MPI Tópicos: Buffer de Mensagem Empacotamento/Desempacotamento.
Var a: tPtNo; begin { corpo principal } PercPreOrdem(a);... a Visão esquemática da memória.
PL/SQL, Procedures e Funções
Monitoria GDI Aula Prática
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
Primeira aula de PL/SQL Parte II
Oracle 9i: SQL e PL/SQL Bruno Celso Cunha de Freitas
Funções ou procedures Professor Esp. Diego André Sant’Ana
Cursor Professor Esp. Diego André Sant’Ana
III – Oracle 10g Coleções. Introdução Coleção: formada de objetos do mesmo tipo, cada um com um índice (posição) único dentro da coleção –NESTED TABLE.
III – O Modelo OR Estudo de Caso, modelo Oracle 10g.
III – Oracle 10g Herança.
Com coleções, cursor não é mais necessário
RT-EXPERT Artis Corp. C calling program RTSUB [rule set subroutine] RTSUB [rule set subroutine] RTSUB [rule set subroutine]... DSL Decision Support Language.
SEQUENCE, PROCEDURE, FUNÇÃO, TRIGGER
Monitoria GDI Aula Prática
Triggers (Gatilhos) Professor Esp. Diego André Sant’Ana
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.
CASE WHEN THEN ELSE END Professor Esp. Diego André Sant’Ana Disciplina: Banco de Dados II professordiegosantana.wordpress.com.
Aula 13 - Triggers. Triggers no SGBD Postgres  Os Triggers (Gatilhos) são funções preparadas para serem disparadas no caso de alguma alteração ocorrer.
Banco de Dados II Prof: Márcio Soussa Curso de Sistemas de Informação Faculdades Jorge Amado.
Banco de Dados Prof. MSc Wagner Siqueira Cavalcante
Projeto de Circuitos Integrados Semidedicados
BANCO DE DADOS Araújo Lima Outubro / 2017 Araújo.
Daniel Paulo SQL Server 2016 Módulo II Daniel Paulo
PL/SQL Triggers e Procedures
Transcrição da apresentação:

Prof. José Fernando Rodrigues Júnior Pacotes Material original: Profa. Elaine Parros Machado de Sousa SCC Bancos de Dados e Suas Aplicações

Packages relacionados Pacote: objeto do esquema que armazena tipos, variáveis, exceções e subprogramas relacionados modularidade funcionalidade informação pública e privada performance 2 partes armazenadas separadamente no dicionário de dados: especificação do pacote – público interface para as aplicações corpo do pacote – privado pode não existir

Packages Instanciação do pacote ocorre na primeira vez em que um elemento do pacote é referenciado alocação de memória para: código objeto variáveis definidas no pacote cada sessão tem sua própria cópia das variáveis empacotadas

Especificação e Corpo do Pacote /* especificação do pacote */ CREATE OR REPLACE PACKAGE PacoteAluno AS /* pode ser IS*/ e_naoEncontrado EXCEPTION; PROCEDURE retira_aluno (p_aluno Aluno.NUSP%TYPE); END PacoteAluno; /* para compilar especificação e corpo juntos*/ /* corpo do pacote */ CREATE OR REPLACE PACKAGE BODY PacoteAluno AS PROCEDURE retira_aluno (p_aluno Aluno.NUSP%TYPE) AS BEGIN DELETE FROM Aluno WHERE NUSP = p_aluno; IF SQL%NOTFOUND THEN RAISE e_naoEncontrado; END IF; END retira_aluno; END PacoteAluno;

Usando o pacote… DEClARE v_aluno Matricula.Aluno%TYPE; BEGIN v_aluno := 222; PacoteAluno.retira_aluno(v_aluno); dbms_output.put_line('Aluno removido!'); EXCEPTION WHEN PacoteAluno.e_naoEncontrado THEN dbms_output.put_line('Aluno não encontrado'); END;

Exemplo – Público vs. Privado - Escopo /* Especificação do pacote*/ CREATE OR REPLACE PACKAGE PacoteAluno AS /*Itens PÚBLICOS – visíveis dentro e fora do pacote*/ TYPE T_MEDIA IS RECORD ( limpa NUMBER, completa NUMBER); PROCEDURE relatorio_aluno(p_aluno Aluno.NUSP%TYPE); END PacoteAluno;

CREATE OR REPLACE PACKAGE BODY PacoteAluno AS /*Itens PRIVADOS – visíveis somente dentro do pacote, pois não estão na especificação, apenas no corpo*/ v_media T_MEDIA; /*Forward declaration – função privada*/ FUNCTION media (p_aluno Matricula.Aluno%TYPE) RETURN T_MEDIA; /*Procedimento presente na definição do pacote - publica*/ PROCEDURE relatorio_aluno (p_aluno Aluno.NUSP%TYPE) AS BEGIN CURSOR c_aluno IS SELECT...; /*local*/ v_media := media(p_aluno);.... END relatorio_aluno; /*Função privada*/ FUNCTION media (p_aluno Matricula.Aluno%TYPE) RETURN T_MEDIA IS BEGIN..... END media; /*Código de Inicialização do Pacote*/ BEGIN v_media := 0; END PacoteAluno;

Packages sobrecarregados Funções e procedimentos dentro do pacote podem ser sobrecarregados útil para aplicar a mesma operação a diferentes tipos de dados restrições: parâmetros não podem diferir apenas no nome ou no modo ( IN – OUT ) funções não podem diferir apenas no tipo de retorno parâmetros não podem diferir apenas em tipos da mesma família (ex: CHAR e VARCHAR2 )

REF CURSORS Cursor normal em um pacote: create or replace PACKAGE CURSORES AS CURSOR c_cursor_normal IS SELECT COUNT(*) FROM L01_MORADOR WHERE MCPF > 3; PROCEDURE UsaCursor(pTotal OUT NUMBER); END;

REF CURSORS Cursor normal em um pacote: CREATE OR REPLACE PACKAGE BODY CURSORES AS PROCEDURE UsaCursor(pTotal OUT NUMBER) AS BEGIN OPEN c_cursor_normal; FETCH c_cursor_normal INTO pTotal; CLOSE c_cursor_normal; END UsaCursor; END CURSORES;

REF CURSORS Cursor normal em um pacote: CREATE OR REPLACE PACKAGE BODY CURSORES AS PROCEDURE UsaCursor(pTotal OUT NUMBER) AS BEGIN OPEN c_cursor_normal; FETCH c_cursor_normal INTO pTotal; CLOSE c_cursor_normal; END UsaCursor; END CURSORES; Dois problemas: 1)O cursor normal não é parametrizável, eu não posso definir um outro valor de CPF para a seleção dos dados 2)Se eu quiser os dados selecionados pelo cursor (além apenas da contagem), eu não consigo

REF CURSORS Solução: REF CURSORS Continuando nosso pacote CURSORES create or replace PACKAGE CURSORES AS TYPE TIPO_REF_CURSOR IS REF CURSOR; CURSOR c_cursor_normal IS SELECT COUNT(*) FROM L01_MORADOR WHERE MCPF > 3; PROCEDURE UsaCursor(pTotal OUT NUMBER); PROCEDURE UsaCursor(pTotal OUT NUMBER, p_cursor_de_saida OUT TIPO_REF_CURSOR, p_valor_CPF IN NUMBER); END;

REF CURSORS Cursor normal em um pacote: CREATE OR REPLACE PACKAGE BODY CURSORES AS PROCEDURE UsaCursor(pTotal OUT NUMBER) AS BEGIN... END UsaCursor; PROCEDURE UsaCursor(pTotal OUT NUMBER, p_cursor_de_saida OUT TIPO_REF_CURSOR, p_valor_CPF IN NUMBER) AS BEGIN OPEN p_cursor_de_saida FOR SELECT COUNT(*) FROM L01_MORADOR WHERE MCPF > p_valor_CPF; FETCH p_cursor_de_saida INTO pTotal; CLOSE p_cursor_de_saida; OPEN p_cursor_de_saida FOR SELECT * FROM L01_MORADOR WHERE MCPF > p_valor_CPF; --não feche o cursor aqui dentro, senão ele será inútil lá fora --CLOSE p_cursor_de_saida; END UsaCursor; END CURSORES;

REF CURSORS Cursor normal em um pacote: CREATE OR REPLACE PACKAGE BODY CURSORES AS PROCEDURE UsaCursor(pTotal OUT NUMBER) AS BEGIN... END UsaCursor; PROCEDURE UsaCursor(pTotal OUT NUMBER, p_cursor_de_saida OUT TIPO_REF_CURSOR, p_valor_CPF IN NUMBER) AS BEGIN OPEN p_cursor_de_saida FOR SELECT COUNT(*) FROM L01_MORADOR WHERE MCPF > p_valor_CPF; FETCH p_cursor_de_saida INTO pTotal; CLOSE p_cursor_de_saida; OPEN p_cursor_de_saida FOR SELECT * FROM L01_MORADOR WHERE MCPF > p_valor_CPF; --não feche o cursor aqui dentro, senão ele será inútil lá fora --CLOSE p_cursor_de_saida; END UsaCursor; END CURSORES; Aqui calculamos o total. Aqui recuperamos dados.

REF CURSORS E como se usa isso? set serveroutput on; DECLARE vTotal NUMBER; vTotal2 NUMBER; vTuplas CURSORES.TIPO_REF_CURSOR; cTemp L01_MORADOR%ROWTYPE; BEGIN CURSORES.UsaCursor(vTotal); dbms_output.put_line('Total: '|| vTotal); CURSORES.UsaCursor(vTotal2,vTuplas,5); dbms_output.put_line('Total: '|| vTotal2); LOOP FETCH vTuplas INTO cTemp; EXIT WHEN vTuplas%NOTFOUND; dbms_output.put_line(cTemp.mcpf); END LOOP; CLOSE vTuplas; END;

Packages Manuais de Consulta SQL Reference PL-SQL Users Guide and Reference PL/SQL Packages and Types Reference