Sie sind auf Seite 1von 17

Functions e Packages

Fernanda Hondo Tedesque


Visão Geral do Assunto

Mecanismos para otimizar a performance das


aplicações e sistemas que acessam bancos de dados.
Functions
São blocos de código SQL que ficam armazenados no servidor do banco
de dados e que podem ser chamados (invocados) a qualquer momento
pelas aplicações ou por outros blocos.

Embora sejam semelhantes às Stored Procedures, são diferentes pelos


objetivos aos quais são utilizadas.

São utilizadas em pequenas operações, auxiliares, e que são chamadas


em processos de transações.
Functions
“Enquanto as Stored Procedures encarregam-se da lógica de negócios,
as Functions ficam responsáveis por tratamento de textos e variáveis,
formatação, operações repetitivas e rotineiras e que possam ser
compartilhadas para outras Stored Procedures ou aplicações.”
[Postgre SQL – Guia do Programador]
Functions
Pequenos programas armazenados no servidor(Banco
de Dados)
• Escritos em SQL e chamados pelas aplicações
• Encapsulam tarefas dentro de um único comando
• Aceitam parâmetros de entrada
• Retornam dados OBRIGATORIAMENTE
• Podem ser usadas como parte de uma expressão.
Functions

FUNCTION NomeFunção (parâmetros, quando necessários) {


RETURNS tipo _do _retorno
var {variáveis locais, quando necessárias}
inicio
{...bloco
de instruções...}
return valor do retorno
fim;
}
Exemplos de criação de Functions
• MySQL:
CREATE FUNCTION nome_função

• Oracle:
CREATE OR REPLACE FUNCTION nome_função

• Postgres:
CREATE FUNCTION nome_função
Exemplo de Criação de uma Function
CREATE FUNCTION calcula_media (n1 FLOAT, n2 FLOAT)
RETURNS FLOAT
DECLARE media FLOAT;
BEGIN
media=(n1+n2)/2;
RETURN media;
END ;
Chamando uma Function
• Se a função retorna valor
valor_esperado = calcula_media(2.4,4);

• Se a função for parte de uma expressão


SELECT calcula_media(2.5, 4) AS ResultadoMedia;
Excluindo uma Function
• DROP nome_função

EXEMPLO

DROP calcula_media;
Packages
• É uma coleção de objetos agrupados logicamente
• Podem armazenar subprogramas, cursores, declarações,
tipos e também variáveis​​.
• Subprogramas : stored procedures e function
• São como bibliotecas, pois são armazenados no banco de
dados e acessados pelas aplicações sempre que necessário
Packages
VANTAGENS
• Modularidade - Packages permitem encapsular tipos relacionados
logicamente, itens e sub-programas em um módulo. Isso ajuda e muito no
desenvolver de aplicativos.
• Ocultação de informações - É possível “esconder” detalhes da
implementação especificando quais tipos, itens e sub-programas serão
públicos (visíveis e acessíveis) ou privados (escondido e inacessível). Isso
simplifica a manutenção, além de proteger a integridade dos packages.
• Melhor performance - Quando chamamos um subprograma empacotado
pela primeira vez, todo o package é carregado na memória, assim, não há a
necessidade de busca no disco toda vez que o package for utilizado.
Estrutura de um Package
• Spec : interface para o Package. Nela são declarados os
tipos, variáveis, constantes, exceções, cursores e
subprogramas(Stored Procedures e Functions) que poderão
ser referenciados a partir de partes externas ao package.

• Body: onde definimos o código para os subprogramas e as


consultas para os cursores. Pode ou não haver um body
dentro de um Package: se a especificação do package não
contém subprogramas e nenhum código privado, então não
precisamos ter um corpo para o package.
Packages
• Criação da especificação
CREATE (OR REPLACE) PACKAGE Nome_Package
[ • EXEMPLO
Definição de tipos públicos,
Declaração de variáveis públicas, CREATE OR REPLACE PACKAGE gerenciaFunc AS
tipos,
Declaração de excessões, FUNCTION get_salario(func_id NUMBER) RETURN NUMBER;
PROCEDURE remove_func(func_id NUMBER);
Declaração de cursores, stored no_sal EXCEPTION;
procedures e functions
Cabeçalhos de functions e procedures END gerenciaFunc;
]
END Nome_Package;
Packages
• Criação do BODY
• EXEMPLO

CREATE (OR REPLACE) PACKAGE CREATE OR REPLACE PACKAGE BODY gerenciaFunc AS


BODY Nome_Package
FUNCTION get_salario(func_id NUMBER) RETURN NUMBER
[ BEGIN {codigo da function} END;
...códigos que implementam as functions ,
procedures e cursores listados na PROCEDURE remove_func (func_id NUMBER) IS
especificação do package... BEGIN {codigo da procedure} END;

]
END gerenciaFunc;
END Nome_Package;
Packages
• Chamando um Package

NomePackage.ElementoPackage

EXEMPLO

salario = gerenciaFunc.get_salario(func_id);

gerenciaFunc.remove_func(func_id);
Packages
• Para excluir um package

DROP PACKAGE nomePackage; (apaga todo o PACKAGE)

DROP PACKAGE BODY nomePackage; (apaga somente o BODY)

Exemplo
DROP PACKAGE gerenciaFunc;

Das könnte Ihnen auch gefallen