V Teorico
V Teorico
V Teorico
Material Teórico
Cursores e procedures
Revisão Textual:
Profa. Esp. Vera Lídia de Sá Cicarone
v1.1
Cursores e procedures
• Introdução
• Conceito
• PL/SQL
• Cursores
• Stored procedure
Atenção
Para um bom aproveitamento do curso, leia o material teórico atentamente antes de realizar as
atividades. É importante também respeitar os prazos estabelecidos no cronograma.
5
Unidade: Cursores e procedures
Contextualização
A imagem acima ilustra a inserção de comandos de programação (if, while, for) com SQL
gerando o PL/SQL.
Os cursores são áreas compostas de linhas e colunas em memória que servem para armazenar
o resultado de uma seleção que retorna 0 ou mais linhas.
O Stored Procedure é um subprograma que é compilado e armazenado no servidor. Ele pode
ser chamado a partir de um comando SQL qualquer.
6
Introdução
Pl/Sql
· Criar variáveis herdando o tipo e tamanho de outras variáveis ou objetos do banco de
dados tais como tabelas;
· Criar cursores para tratamento de resultado de queries;
· Criar registros para armazenar resultado de cursores;
· Trata erros;
· Utiliza comandos de repetição e comparação;
Cursores
· Você usa um cursor para buscar linhas retornadas por uma consulta, você busca as
linhas do cursor uma por vez.
Stored Procedure
· É um subprograma que é compilado e armazenado no servidor. Ele pode ser chamado
a partir de um comando SQL qualquer
Conceito
Vantagens
· Portabilidade: qualquer máquina que rode o banco Oracle pode executar a mesma
aplicação PL/SQL;
· Integração com o gerenciador de banco: visto que as variáveis podem ser definidas a partir
da definição de colunas no banco, as alterações nele realizadas podem automaticamente
(ou seja, sem manutenções), refletir nos blocos PL/SQL;
- DECLARE (opcional)
• Variáveis, cursores, constantes, tabelas, estruturas,exceptions
7
Unidade: Cursores e procedures
- BEGIN (obrigatório)
• SQL statements
• PL/SQL statements
- EXCEPTION (opcional)
• Ações que deverão ser executadas quando ocorrer erros
- END; (obrigatório)
PL/SQL
SET SERVEROUTPUT ON
DECLARE
Myname VARCHAR2(20);
BEGIN
DBMS_OUTPUT.PUT_LINE(‘My name is: ‘ || Myname);
Myname := ‘John’;
DBMS_OUTPUT.PUT_LINE(‘My name is: ‘ || Myname);
END;
SET SERVEROUTPUT ON
DECLARE
Myname VARCHAR2(20):= ‘John’;
BEGIN
Myname := ‘Steven’;
DBMS_OUTPUT.PUT_LINE(‘My name is: ‘||Myname);
END;
8
DECLARE
v_empno NUMBER(6):= &empno;
v_emp_salary number (8,2);
BEGIN
SELECT salary INTO v_emp_salary FROM employees WHERE employee_id = v_empno;
dbms_output.put_line(‘O salário do funcionário ‘|| v_empno|| ‘ é de ‘||v_emp_salary);
END;
9
Unidade: Cursores e procedures
Exemplo2: Update: Atualizando o salário para 800 para todos que possuem o
cargo = ST_CLERK
DECLARE
sal_increase employees.salary%TYPE := 800;
BEGIN
UPDATE employees
SET salary = salary + sal_increase
WHERE job_id = ‘ST_CLERK’;
END;
Exemplo4: If/else IF
DECLARE
myage number:=31;
BEGIN
IF myage < 11
THEN
DBMS_OUTPUT.PUT_LINE(‘ Sou criança’);
ELSIF myage < 20
THEN
DBMS_OUTPUT.PUT_LINE(‘ Sou jovem’);
ELSIF myage < 30
THEN
DBMS_OUTPUT.PUT_LINE(‘ Estou na casa dos vinte..’);
10
ELSIF myage < 40
THEN
DBMS_OUTPUT.PUT_LINE(‘ Estou na casa dos trinta’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘ Serei sempre jovem…’);
END IF;
END;
Cursores
Você usa um cursor para buscar linhas retornadas por uma consulta;
Você busca as linhas do cursor uma por vez.
Temos 2 tipos de cursores:
Declarando cursor
DECLARE
CURSOR emp_cursor IS
SELECT employee_id, last_name FROM employees
WHERE department_id =30;
11
Unidade: Cursores e procedures
Abrindo o cursor
DECLARE
CURSOR emp_cursor IS
SELECT employee_id, last_name FROM employees
WHERE department_id =30;
...
BEGIN
OPEN emp_cursor;
SET SERCEROUTPUT ON
DECLARE
CURSOR emp_cursor IS
SELECT employee_id, last_name FROM employees
WHERE department_id =30
v_empno employees.employee_id%TYPE;
vl_name employees.Last_name%type;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO v_empno, v_lane;
EXIT WHEN emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_empno || ‘ ‘ || v_lane)
END LOOP;
CLOSE emp_cursor;
END;
12
Stored procedure
· São Blocos PL/SQL armazenados no banco de dados de forma compilada e que podem
ser chamados no SQL *PLUS;
Exemplo:
CREATE OR REPLACE PROCEDURE Nome_Proc
(Argumento1 modo Tipo_de_Dados,
Argumento2 modo Tipo_de_Dados,
Argumento3 modo Tipo_de_Dados)
IS ou AS
Variáveis locais, constantes,...
Begin
Bloco Pl/SQL
Exception
End nome_da_procedure;
13
Unidade: Cursores e procedures
Begin
NV_Fone:= Substr(V_fone,1,4)||’-’||Substr(V_fone,5,4);
Dbms_Output.Put_Line (NV_Fone);
End Nr_Fone;
Executando a procedure
exec nr_fone(12345678);
Executando a procedure
Set serveroutput on
DECLARE
Var1 number;
Var2 number;
Var3 number;
Begin
Var1:=30;
Var2:=40;
Var3:=50;
Dbms_Output.Put_Line(Var1||’-’||Var2||’-’||Var3);
Testa_Parametros(Var1,Var2,Var3);
Dbms_Output.Put_Line(Var1||’-’||Var2||’-’||Var3);
End;
14
Material Complementar
http://www.linhadecodigo.com.br/artigo/687/sql-server-funcoes-de-usuario-user-functions.aspx
15
Unidade: Cursores e procedures
Referências
16