Você está na página 1de 4

Capítulo 5

PACKAGES
Laboratório de Banco de Dados Cliente/Servidor 5 -1

5. Packages

Packages são grupos de procedures, funções, variáveis e comandos SQL


agrupados em um único procedimento global.

Utilizamos Packages com o objetivo de agruparmos procedimentos afins,


obtendo uma organização que ajudará na administração do ambiente de Banco
de Dados.

Procedimentos que podem ser agrupados:

♦ Stored Procedures
♦ Funções
♦ Variáveis
♦ Comandos SQL

Stored Procedure
Ver definição no capítulo Stored Procedure.

Funções
Ver definição no capítulo Funções.

Variáveis
São definidas para o uso no próprio Package e podem ser utilizadas nas
Funções e procedures internas do package.

Comandos SQL
São definidos no corpo do Package e executados todas as vezes que uma
procedure ou função é chamada por um aplicativo.
Os comandos SQL devem ser codificados em bloco BEGIN - END e
esse END também encerrará o Package body.

Estrutura da Criação de Packages:

Para criar um Package, a especificação do Package e o corpo do Package


são criados separadamente. Então existe dois comandos:

Create package para especificação do package e

Create package body para definir o corpo do package, isto é , para definir o
fonte das procedures, das functions, os comandos SQL , as variáveis e
constantes, cursores e exceptions.
Laboratório de Banco de Dados Cliente/Servidor 5 -2

Uma especificação consiste de uma lista de funções, procedures,


variáveis, constantes, cursores e exceções que serão disponíveis para usuários do
Package.

Exemplo:

Create or replace package adm_package


As
Function calc_media_aluno (departamento varchar2) return int;
Procedure status (mat in int, dis in varchar2, Perio in varchar2,
sta out varchar2);

End;
/

Um corpo de um package contém blocos PL/SQL e especificações para


todos dos objetos públicos ou não listados na especificação do package.

O package body pode incluir objetos que não estão listados no package
specification; tais como objetos são ditos privados e não são disponíveis para
usuário do package.

Objetos privados podem somente ser chamados por outros objetos dentro
do mesmo package body.

Um package body pode também incluir código (PL/SQL) que será


executado todas as vezes que o package é chamado.
Laboratório de Banco de Dados Cliente/Servidor 5 -3

Exemplo:

Create or replace package body Adm_Package


As
usuario varchar2(15);
Function Calc_media_aluno (departamento in varchar2)
return int Is
media int := 0;
BEGIN
SELECT avg(count(*)) INTO media
FROM curso c, aluno a
WHERE c.codigo_curso=a.codigo_curso and
c.cod_depart='D3'
GROUP BY c.codigo_curso;
RETURN media;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20100, '............');
END calc_media_aluno;

Procedure Status (mat in int, dis in varchar2,


Perio in varchar2, sta out varchar2)
As
nf int;
BEGIN
SELECT nota_final INTO nf
FROM realizou
WHERE matricula=mat and
Codigo_discip=dis and
periodo=perio;
If nf >= 6 Then
sta:='A';
Else
sta:='R';
End If;
END Status;
BEGIN
SELECT user INTO usuario from dual;
END Adm_Package;
/

Você também pode gostar