Apostila de PL - SQL - Alexandre
Apostila de PL - SQL - Alexandre
Apostila de PL - SQL - Alexandre
PL/SQL ORACLE
Contedo
PREFCIO ....................................................................................................................................................2
INTRODUO .............................................................................................................................................3
VIEW ..............................................................................................................................................................4
CREATE VIEW ..............................................................................................................................................4
BLOCO PL/SQL ...........................................................................................................................................5
COMENTRIOS .............................................................................................................................................6
PACOTE DBMS_OUTPUT ..........................................................................................................................6
O ATRIBUTO %TYPE ................................................................................................................................7
CREATE SEQUENCE .................................................................................................................................7
CONTROLE DE FLUXO ............................................................................................................................9
COMANDO IF.........................................................................................................................................9
CREATE TRIGGER ...................................................................................................................................10
DECLARANDO VARIVEIS DENTRO DE UMA TRIGGER .................................................................................12
GERANDO UMA MENSAGEM DE ERRO .........................................................................................................13
GERAO AUTOMTICA DE CHAVE PRIMRIA ............................................................................................15
ALTER TRIGGER .........................................................................................................................................16
DROP TRIGGER ...........................................................................................................................................17
CREATE FUNCTION ................................................................................................................................17
DROP FUNCTION.........................................................................................................................................19
Cursor ....................................................................................................................................................19
Cursos For Loop.................................................................................................................................21
COMANDO WHILE .. LOOP ................................................................................................................22
EXCEPTIONS ...............................................................................................................................................23
Outros EXCEPTIONS............................................................................................................................24
TOO_MANY_ROWS - QUANDO UM SELECT RETORNA MAIS DE UMA LINHA..........................................24
OTHERS - QUALQUER TIPO DE ERRO .......................................................................................................24
RETORNANDO ERROS ........................................................................................................................25
EXCEPTION..........................................................................................................................................25
FUNES DE ERRO ...............................................................................................................................26
CREATE PROCEDURE ..................................................................................................................................26
Alter Procedure .....................................................................................................................................27
Drop Procedure .....................................................................................................................................27
Executando Procedure ..........................................................................................................................27
CREATE PACKAGE .................................................................................................................................28
Create Package Body ............................................................................................................................30
Alter Package ........................................................................................................................................33
Pgina 1
PL/SQL ORACLE
Prefcio
Este curso explora toda a potncia da linguagem PL/SQL da ORACLE.
PBLICO
Todos aqueles que esto tecnicamente envolvidos na criao do ORACLE aplicaes ou
manutenes desse aplicativo, Programadores, Administradores de Banco de Dados, Analistas e
Programadores Snior. Usurios finais quem deseja estender seus conhecimentos, pode achar o curso
benfico.
PR-REQUISITOS
Linguagem SQL e noes de banco de dados ORACLE.
OBJETIVOS
No final do curso os alunos estaro aptos para:
Criar cdigos usando a linguagem PL/SQL ORACLE.
Desenvolver PROCEDURES,FUNOES e PACKAGES.
MANEIRA DE APRESENTAO
Este curso direcionado com combinaes tradicionais de sees com mdias projees e sees
de demonstraes usando a tela de um projetor. Os alunos tero ampla oportunidade para praticar os
tpicos trazidos nas sees anteriores.
HORRIO
Este curso exige no mnimo 15 horas divididas em 5 dias, e mais 30 horas de dedicao extra
curso para que o aluno possa assimilar os conceitos apresentados em sala de aula.
Pgina 2
PL/SQL ORACLE
Introduo
Recentemente o perfil de utilizao evoluiu novamente e nos vemos diante de novas
necessidades. Estruturas mais complexas como Banco de Dados Distribudos, grande quantidade
de informao, custo de trfego em rede e Arquitetura Cliente-Servidor so algumas
caractersticas desse novo perfil.
Na Arquitetura Cliente-Servidor, por exemplo, muito importante manter o trfego de rede
a um mnimo e aumentar a performance do RDBMS de modo que ele possa atender rapidamente
as freqentes transaes solicitadas pelo usurio.
Com essas especificaes, organizar o processamento tornando-se fundamental. Por
exemplo, grandes blocos PL/SQL circulando pela rede e sendo compilados e otimizados pelo
servidor, a cada nova execuo, no uma boa soluo. A melhor idia armazenar rotinas
dentro do RDBMS e acionar essas rotinas atravs de chamadas. Em vez de todo um bloco
PL/SQL temos circulando pela rede apenas o nome da rotina e seus parmetros. Alm disso o
Oracle pode guardar a forma compilada e otimizada dessas rotinas melhorando o tempo de
execuo. No Oracle isto um Procedimento Armazenado, ou STORED PROCEDURE.
Pgina 3
PL/SQL ORACLE
View
View uma tabela lgica gerada no instante da execuo do comando. Para criar uma
view a partir de uma ou mais tabelas usamos o comando Create View. Todas alteraes,
inseres ou excluses poderam refletir nas tabelas desde que cada linha da view corresponda a
uma linha real da tabela.
Create View
Sintaxe
CREATE [OR REPLACE][FORCE | NOFORCE] VIEW
[schema.]view[(alias[,alias]...)]
AS subquery
[[WITH CHECK OPTION [CONSTRAINT constraint]] | [WITH READ ONLY]]
Parmetros
OR REPLACE
FORCE
NOFORCE
Schema
View
Nome da view
alias
AS subquery
Pgina 4
PL/SQL ORACLE
Exemplo I
O comando seguinte cria uma view da tabela EMP. Esta view mostra os funcionrios do
departamento 20 e seu salrio anual:
CREATE VIEW dept20
AS SELECT ename, sal*12 annual_salary
FROM emp
WHERE deptno = 20
Exemplo II
Este exemplo cria uma view chamada ANALISTAS, com restrio na alterao do cargo:
CREATE VIEW analistas (id_number, person, department, position)
AS SELECT empno, ename, deptno, job
FROM emp
WHERE job = 'ANALISTA'
WITH CHECK OPTION CONSTRAINT wco
Exemplo III
Este exemplo cria uma view igual ao exemplo anterior, mas no permite alteraes:
CREATE VIEW clerk (id_number, person, department, position)
AS SELECT empno, ename, deptno, job
FROM emp
WHERE job = 'CLERK'
WITH READ ONLY
Bloco PL/SQL
Um bloco PL/SQL consiste de um conjunto de instrues SQL (SELECT,INSERT,
UPDATE, DELETE) ou comandos PL/SQL, e desempenha uma funo lgica nica, afim de
resolver um problema especfico ou executar um conjunto de tarefas afins. O Bloco PL/SQL
tambm pode ser referenciado com Unidade de Programa PL/SQL. Os blocos PL/SQL so
qualificados em bloco annimo e Stored Procedure.
O bloco annimo
No tem nome
No est armazenado no SGDB
Geralmente est armazenada na aplicao.
Stored SubProgramas
Utiliza a estrutura do bloco annimo com base.
Esto armazenados no SGDB,
A eles atribudo um nome que poder ser utilizado nas aplicaes ou por
outros objetos do banco de dados
A estrutura de um bloco PL/SQL constituida de trs sees:
Pgina 5
PL/SQL ORACLE
Comentrios
Os comentrios em PL/SQL so de dois tipos
a) Uma Linha: utiliza-se o delimitador --. A partir de dois hfens tudo o que for escrito at o final
da linha considerado comentrio.
b) Mltiplas linhas: utiliza-se o delimitador /* para abrir e */ para fechar. Tudo e todas as linhas
que estiverem entre os dois delimitadores sero ignorados
Exemplo:
BEGIN
-- comentando apenas uma linha
COMANDO1;
/* comentando
vrias
linhas */
COMANDO2;
COMANDO3; -- o resto ser ignorado
END;
Pacote DBMS_OUTPUT
Na programao PL/SQL no existe nenhuma funcionalidade de entrada ou sada. Para
remediar isso, usaremos no aplicativo SQL*Plus o Supplied Package DBMS_OUTPUT que
fornecer apenas a capacidade de dar sadas para mensagens na tela. Isso feito por meio de
dois passos 1.Permitir a sada no SQL*Plus com o comando set serveroutput SET
SERVEROUTPUT {ON | OFF}. Dentro do programa PL/SQL, utilize o procedure
DBMS_OUTPUT.PUT_LINE. Essa procedure adicionar o argumento informado ao buffer de
sada. Com esses passos completados, a sada impressa na tela do SQL*Plus depois que o
bloco for completamente executado. Durante a execuo, o buffer preenchido pelas chamadas
de DBMS_OUTPUT.PUT_LINE. O SQL*Plus no recupera o contedo do buffer e no o imprime
at que o controle retorne para o SQL*Plus, depois que o bloco terminou a execuo.
Exemplo:
SQL> SET SERVEROUTPUT ON
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE(Hello from PL/SQL);
[Alexandre Costa Vieira PL/SQL ORACLE]
Pgina 6
PL/SQL ORACLE
3 END;
4 /
Hello from PL/SQL
PL/SQL procedure successfully completed.
SQL>
O atributo %TYPE
Declara a varivel de acordo com uma coluna definida no Banco de Dados;
Exemplo
V_ename
V_balance
V_min_balance
emp.ename%Type;
number(7,2);
v_balance%Type :=10;
Create Sequence
Cria uma sequence. Uma sequence um objeto que permite vrios usurios gerarem
valores inteiros sem repetio.
Sintaxe
CREATE SEQUENCE [schema.]sequence
[INCREMENT BY integer]
[START WITH integer]
[MAXVALUE integer]
[MINVALUE integer]
[CYCLE | NOCYCLE]
[CACHE integer | NOCACHE]
[ORDER | NOORDER]
Parmetros
schema
Sequence
Nome da sequence
INCREMENT BY
MINVALUE
MAXVALUE
START WITH
CYCLE
Pgina 7
PL/SQL ORACLE
extremos
NOCYCLE
Ira incrementando
estipulado
ate
atingir
limite
CACHE
NOCACHE
ORDER
NOORDER
Depois de criada a sequence, voc pode acessar seus valores nos comandos SQL
atravs das pseudo-colunas abaixo:
Exemplo I
O comando seguinte cria uma sequence com incremento de 10 comeando do 1:
Exemplo II
O comando a seguir cria uma sequence com incremento de 1 comeando do 11:
Exemplo III
O comando a seguir cria uma sequence comeando do 30:
CREATE SEQUENCE seq_cod_cli
[Alexandre Costa Vieira PL/SQL ORACLE]
Pgina 8
PL/SQL ORACLE
CONTROLE DE FLUXO
COMANDO IF
1. IF <condio> THEN
<comandos>
END IF;
2. IF <condio> THEN
<comandos>
ELSE
<comandos>
END IF;
3. IF <condio> THEN
<comandos>
ELSIF <condio> THEN
<comandos>
END IF;
4. IF <condio> THEN
<comandos>
ELSIF <condio> THEN
<comandos>
ELSE
<comandos>
END IF;
5. IF <condio> THEN
IF <condio> THEN
<comandos>
END IF;
END IF;
EXEMPLO
DECLARE
QUANT NUMBER(3);
BEGIN
SELECT ES.NR_QTD INTO QUANT
FROM ESTOQUE ES
WHERE CD_PROD = 30;
IF QUANT > 0 AND QUANT < 3000 THEN
UPDATE ESTOQUE SET NR_QTD = QUANT + 1
[Alexandre Costa Vieira PL/SQL ORACLE]
Pgina 9
PL/SQL ORACLE
Create Trigger
Cria e habilita triggers. Trigger um bloco de cdigo PL/SQL associado a uma tabela. Se
um comando SQL for executado sobre esta tabela as triggers so disparadas automaticamente
pelo Oracle. Normalmente as regras de negcio so implementadas em triggers.
Sintaxe
schema
table
trigger
BEFORE
AFTER
DELETE
INSERT
UPDATE OF
REFERENCIN
Pgina 10
PL/SQL ORACLE
FOR EACH
ROW
WHEN
pl/sql_block
Quando uma trigger criada para mais que uma operao DML, pode-se utilizar
constantes condicionais no corpo da trigger para executar determinado bloco de comandos,
dependendo do comando que a disparou. As constantes condicionais so as seguintes:
INSERTING
DELETING
UPDATING
UPDATING (column_name)
TRUE se o comando que disparou a trigger foi um
UPDATE e a coluna column_name foi alterada.
Obtendo o contedo dos campos em triggers:
Se a operao for
INSERT retornar o
BEFORE
Se a trigger for valor que poder ser
inserido pelo comando
disparada
BEFORE
os SQL. No UPDATE o
dados podem ser comportamento ser o
:NEW.Nome_do_Campo
mesmo, pois retornar o
alterados.
valor do campo com as
alteraes que podero
Retorna o contedo novo do campo.
ser feitas.
No DELETE no utilizado pois
AFTER
no h alterao de valores,
consequentemente no h valor Se a trigger for
novo.
disparada AFTER
os dados no
podem
ser
alterados.
Se a operao for
INSERT retornar o
valor que foi inserido
pelo comando SQL. No
UPDATE
o
comportamento ser o
mesmo, pois retornar o
valor do campo com as
alteraes que foram
feitas.
Pgina 11
PL/SQL ORACLE
BEFORE
:OLD.Nome_do_Campo
Retorna o contedo antigo do
campo e nunca pode ser alterado.
No INSERT no utilizado pois no
h valores antigos a insero.
AFTER
Se a operao for
UPDATE retornar o
valor do campo antes da
alterao. No DELETE
retornar o contedo do
campo atual.
Se a operao for
UPDATE retornar o
valor do campo antes da
alterao. No DELETE
retornar o contedo do
campo atual.
Constraint
s
Gravao
Triggers
AFTER
Recomenda-se o uso das triggers before para correo dos dados gravados em :new,
pois esse o momento ideal para isso. Consistncia de valores, checagem de dados aps a
gravao e operaes similares deve-se usar triggers after.
Pgina 12
PL/SQL ORACLE
Exemplo I
O exemplo seguinte usa as constantes condicionais para determinar qual tipo de
comando SQL foi feito na tabela classified_table:
CREATE TRIGGER audit_trigger
BEFORE INSERT OR DELETE OR UPDATE ON classified_table
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO audit_table
VALUES (USER || ' inseriu ' || ' novo valor: ' ||
:new.campo);
ELSIF DELETING THEN
INSERT INTO audit_table
VALUES (USER || ' apagou ' || ' valor antigo: ' ||
:old.campo);
ELSIF UPDATING('FORMULA') THEN
INSERT INTO audit_table
VALUES (USER || ' alterou ' || ' formula antiga: ' ||
:old.formula || ' formula nova: ' || :new.formula);
ELSIF UPDATING THEN
INSERT INTO audit_table
Pgina 13
PL/SQL ORACLE
Exemplo II
Este exemplo cria uma trigger que s permite alteraes na tabela EMP sejam feitas
somente no horrio comercial:
CREATE TRIGGER scott.emp_permit_changes
BEFORE DELETE OR INSERT OR UPDATE ON scott.emp
DECLARE
dummy
INTEGER;
BEGIN
/* Se for Sbado ou Domingo retorna ERROR.*/
IF (TO_CHAR(SYSDATE, 'DY') = 'SAT' OR TO_CHAR(SYSDATE, 'DY') =
'SUN') THEN
raise_application_error( -20501, 'Voc no pode alterar
funcionrio no fim de semana');
END IF;
/*Se o horrio atual for menor que 8:00AM ou maior 6:00PM, ento
retorna ERRO. */
IF (TO_CHAR(SYSDATE, 'HH24') < 8 OR TO_CHAR(SYSDATE, 'HH24') >=
18)
THEN
raise_application_error(
funcionrio no horrio do expediente');
-20502,
'S
pode
alterar
END IF;
END;
Exemplo III
Este exemplo cria uma trigger que quando um novo funcionrio adicionado ou o
salrio de um j existente alterado, garante que o valor do salrio esteja na faixa da funo do
funcionrio:
CREATE TRIGGER scott.salary_check
BEFORE INSERT OR UPDATE OF sal, job ON scott.emp
FOR EACH ROW
WHEN (new.job <> 'PRESIDENT')
DECLARE
Pgina 14
PL/SQL ORACLE
minsal NUMBER;
maxsal NUMBER;
BEGIN
/* Pega o menor e o maior salrio da funo.
SELECT minsal, maxsal
*/
Exemplo I
O comando seguinte incrementa a sequence ZSEQ e retorna o novo valor:
CREATE TRIGGER GeraNumeroNota
BEFORE INSERT ON Nota_Fiscal
FOR EACH ROW
BEGIN
SELECT seq_nota_fiscal.nextval INTO :new.nr_nota FROM dual;
END;
Exemplo II
Gera chave primria para a tabela Cliente caso no tenha sido informado no comando
de insero.
CREATE OR REPLACE TRIGGER trg_cliente_pk
BEFORE INSERT ON CLIENTE
FOR EACH ROW
BEGIN
IF :NEW.cod_cli is null THEN
SELECT seq_cliente.nextval INTO :new.cod_cli FROM dual;
Pgina 15
PL/SQL ORACLE
END IF;
END;
Exemplo III
Gera chave primria para a tabela Fatura , mas dependendo da ltima fatura da filial na tabela
FILIAL.
CREATE OR REPLACE TRIGGER trg_fatura_pk
BEFORE INSERT ON FATURA
FOR EACH ROW
BEGIN
SELECT nvl(curr_fat, 0) + 1 INTO :next_nr FROM FILIAL
WHERE cod_fil = :new.cod_fil;
END;
Outra maneira de implementar a trigger anterior:
CREATE OR REPLACE TRIGGER trg_fatura_pk
BEFORE INSERT ON FATURA
FOR EACH ROW
BEGIN
UPDATE filial SET curr_fat = curr_fat +1
WHERE cod_fil = :new.cod_fil
RETURNING curr_fat INTO :NEW.nr_fat;
END;
Alter Trigger
Para habilitar ou desabilitar uma trigger.
Sintaxe
Pgina 16
PL/SQL ORACLE
Parmetros
schema
Trigger
ENABLE
Habilita a trigger.
DISABLE
Desabilita a trigger.
Exemplo
ALTER TRIGGER reorder
DISABLE;
ALTER TRIGGER reorder
ENABLE;
Drop Trigger
Para remover uma trigger da base.
Sintaxe
trigger
Exemplo
Este exemplo remove uma trigger do usurio RUTH:
DROP TRIGGER ruth.reorder
Create Function
Cria uma funo de usurio.
Uma funo um conjunto de comandos PL/SQL normalmente utilizados para efetuar
um clculo ou manipular um valor. Podem ser utilizadas dentro de comandos SQL. Nas functions
[Alexandre Costa Vieira PL/SQL ORACLE]
Pgina 17
PL/SQL ORACLE
no aconselhavel fazer alteraes no status da base, por exemplo, incluir, alterar, deletar
registros. Ao alterar o status do banco, esta funo no poder ser utilizada dentro de comandos
SQL. Assim a utilidade da function descaracterizada, assumindo a funo da procedure que
prpria para alterar dados.
Sintaxe
CREATE [OR REPLACE] FUNCTION [schema.]function
[ (argument [IN] datatype
[, argument [IN] datatype] ...)]
RETURN datatype
{IS | AS} pl/sql_subprogram_body
Parmetros
OR REPLACE
schema
Dono da funo.
function
Nome da funo
argument
IN
datatype
RETURN
datatype
pl/sql_subprogram_body
o cdigo da funo.
Exemplo I
Funo que calcula a media dos salrio de um determinado departamento:
CREATE FUNCTION cal_media(p_deptno IN NUMBER)
RETURN NUMBER IS v_media number;
BEGIN
SELECT avg(sal)
INTO v_media
FROM emp
WHERE dept_no = p_deptno;
RETURN(v_media);
END;
A utilizao da funo criada acima em um comando SQL:
Pgina 18
PL/SQL ORACLE
Drop Function
Remove uma funo da base.
Exemplo
DROP FUNCTION cal_media;
Cursor
Permite uma navegao registro a registro nas linhas retornadas por um comando
SELECT.
Sintaxe
Pgina 19
PL/SQL ORACLE
Exemplo I
DECLARE
my_sal emp.sal%TYPE;
factor INTEGER:=2;
CURSOR c1(p_Job varchar2) IS SELECT factor*sal FROM emp
WHERE job=p_Job;
BEGIN
...
OPEN c1(ANALISTA);
LOOP
FETCH c1 INTO my_sal;
EXIT WHEN c1%NOT FOUND;
...
END LOOP;
CLOSE c1;
END;
Pgina 20
PL/SQL ORACLE
Exemplo II
DECLARE
Cursor c_cliente IS
Select * from Clientes order by Nome_Cli;
Cursor c_Fatura(p_cli number) IS
Select * from Fatura where cod_cli = p_cli;
R_Cliente c_cliente%rowtype;
R_Fatura c_fatura%rowtype;
BEGIN
OPEN c_cliente;
LOOP
FETCH c_cliente INTO R_cliente;
EXIT When c_cliente%NOT FOUND;
OPEN c_fatura(R_cliente.cod_cli);
DBMS_OUTPUT.PUT_LINE (R_cliente.Nome);
LOOP
FETCH c_fatura INTO R_fatura;
EXIT When c_Fatura%NOT FOUND;
DBMS_OUTPUC.PUT_LINE (R_Fatura.Data);
END LOOP;
CLOSE c_Fatura;
END LOOP;
CLOSE c_Cliente;
END;
Exemplo I
DECLARE
BEGIN
...
For R1 in (SELECT factor*sal FROM emp WHERE job=p.job) LOOP
...
[Alexandre Costa Vieira PL/SQL ORACLE]
Pgina 21
PL/SQL ORACLE
END LOOP;
END;
Exemplo II
DECLARE
BEGIN
For R_cliente IN (Select * from Cliente order by Nome_cli)
LOOP
DBMS_OUTPUT.PUT_LINE(R_cliente.Nome_Cli);
For R_Fatura IN (Select * from Fatura
Where cod_cli = R_Cliente.cod_cliente) LOOP
DBMS_OUTPUT.PUT_LINE(...);
END LOOP;
END LOOP;
END;
Pgina 22
PL/SQL ORACLE
Exceptions
Bloco de tratamento de erros.
Sintaxe
DECLARE
past_due EXCEPTION;
BEGIN
...
...
IF ... THEN
RAISE past_due; - esse no tratado
END IF;
...
EXCEPTION
WHEN past_due THEN - no suporta excees HANDLE
...
WHEN OTHERS THEN
...
END;
Exemplo
DECLARE
deadlock_detected EXCEPTION ;
PRAGMA EXCEPTION_INIT (deadlock_detected,-60);
BEGIN
...
raise_application_error(-60,Mensagem do Usuario);
...
EXCEPTION
WHEN deadlock_detected THEN
... - tratamento do erro
...
END;
preciso
criar
Pgina 23
PL/SQL ORACLE
RAISE_APPLICATION_ERROR(
-60,Mensagem de Erro);
Outros EXCEPTIONS
NO_DATA_FOUND -
DECLARE
NOME CHAR(15);
CARGO CHAR(10);
BEGIN
SELECT ENAME, JOB INTO NOME, CARGO
FROM EMP
WHERE EMPNO = 1111;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO PROBLEMA (ERRO,DTERRO)
VALUES (REGISTRO INEXISTENTE,SYSDATE);
WHEN TOO_MANY_ROWS THEN
INSERT INTO PROBLEMA (ERRO,DTERRO)
VALUES (MUITOS REGISTROS,SYSDATE);
WHEN OTHERS THEN
INSERT INTO PROBLEMA (ERRO,DTERRO)
VALUES (OUTRO ERRO QUALQUER,SYSDATE);
END;
Pgina 24
PL/SQL ORACLE
OUTRO EXEMPLO
DECLARE
NM VARCHAR2(30);
BEGIN
SELECT NOME INTO NM
FROM TESTE
WHERE IDADE=30;
DBMS_OUTPUT.PUT_LINE(NM);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('IDADE INEXISTENTE');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('MULTIPLAS LINHAS');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('OUTRA SAIDA');
END;
RETORNANDO ERROS
SQLERR - Retorna o nmero do erro
SQLERRM Retorna o nmero e a descrio do erro
Exemplo
BEGIN
INSERT INTO TESTE VALUES
(50,45,SYSDATE);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('ERRO - '||SQLERRM);
END;
EXCEPTION
Pgina 25
PL/SQL ORACLE
FUNES DE ERRO
sqlerrm, sqlcode
Create Procedure
Para criar uma procedure. Uma procedure um grupo de comandos PL/SQL que
realizam uma tarefa.
Sintaxe
OR REPLACE
schema
Dono da procedure.
procedure
Nome da procedure.
argument
Parmetro da procedure.
IN
OUT
IN OUT
datatype
pl/sql_subprogram_body
Codificao da procedure
Pgina 26
PL/SQL ORACLE
Alter Procedure
Para recompilar uma procedure.
Sintaxe
Drop Procedure
Para remover uma procedure da base.
Sintaxe
Executando Procedure
Exemplo
BEGIN
NomeProc(Param);
END;
Ou
EXEC NomeProc(Param);
Pgina 27
PL/SQL ORACLE
Dentro de um bloco:
BEGIN
NomeProc(Param);
END;
Create Package
Cria uma package. Uma package a especificao de uma coleo de procedures, functions,
e outros objetos de programa com objetivos afins. Parte pblica da Package, visvel para o
mundo externo.
Sintaxe
schema
package
Nome da packge.
pl/sql_package_s
pec
a especificao da package.
Exemplo
Este comando cria a package EMP_MGMT:
CREATE PACKAGE emp_mgmt AS
FUNCTION hire(ename VARCHAR2, job VARCHAR2, mgr NUMBER,
sal NUMBER, comm NUMBER, deptno NUMBER)
RETURN NUMBER;
FUNCTION create_dept(dname VARCHAR2, loc VARCHAR2)
RETURN NUMBER;
PROCEDURE remove_emp(empno NUMBER);
PROCEDURE remove_dept(deptno NUMBER);
PROCEDURE increase_sal(empno NUMBER, sal_incr NUMBER);
PROCEDURE increase_comm(empno NUMBER, comm_incr NUMBER);
no_comm EXCEPTION;
no_sal EXCEPTION;
END emp_mgmt;
Pgina 28
PL/SQL ORACLE
Pgina 29
PL/SQL ORACLE
schema
package
pl/sql_package_body
Codificao do corpo da package
Exemplo
Este exemplo cria o corpo da packge EMP_MGMT:
CREATE PACKAGE BODY emp_mgmt AS
tot_emps
NUMBER;
tot_depts NUMBER;
FUNCTION hire(ename VARCHAR2, job VARCHAR2, mgr NUMBER,
sal NUMBER, comm NUMBER, deptno NUMBER)
RETURN NUMBER IS
new_empno NUMBER(4);
BEGIN
SELECT empseq.NEXTVAL
INTO new_empno
FROM DUAL;
INSERT INTO emp
VALUES (new_empno, ename, job, mgr, sal, comm, deptno,
tot_emps := tot_emps + 1;
RETURN(new_empno);
END;
[Alexandre Costa Vieira PL/SQL ORACLE]
Pgina 30
PL/SQL ORACLE
Pgina 31
PL/SQL ORACLE
END emp_mgmt
Pgina 32
PL/SQL ORACLE
Alter Package
Recompila uma package.
Sintaxe
Pgina 33