Escolar Documentos
Profissional Documentos
Cultura Documentos
BANCO DE DADOS II
Aula 8
(10/06) mario.godoy@univasf.edu.br
Linguagem PL/SQL
A linguagem PL/SQL permite: Constantes; Variveis; Subprogramas (procedures e funes); Instrues condicionais; Controle de erros de execuo; Encapsulamento; Interface com rotinas escritas em outras linguagens.
PL/SQL - Sintaxe
Declare
ooo
Begin
Variveis PL/SQL utilizadas Aes executveis Opcional! O que fazer em caso de erro.
ooo
Exception
ooo
End;
PL/SQL - Benefcios
PERFORMANCE A PL/SQL pode: Reduzir o trfego na rede pelo envio de um bloco contendo diversos comandos de SQL agrupados; Melhor performance; Reuso de programao o cdigo pode ser compartilhado com diversas aplicaes (Stored Procedure); Portabilidade este cdigo roda em qualquer sistema operacional e plataforma, desde que exista o Oracle instalado.
Comentrios
Comentrios em PL/SQL: Comentrio de linha: -- Comentrio de bloco de cdigo:
/* (incio) */ (fim)
v4 NUMBER(4);
PL/SQL Atribuio
Podemos atribuir valores s variveis de duas maneiras: Utilizando o operador de atribuio: total
:= varQuant * varValor;
Utilizando um comando SELECT com a clusula INTO: SELECT matricula_aluno, nome_aluno INTO FROM varMatricula, varNome aluno
armazenado em variveis;
10
Comentrios - Exemplo
Exemplo de cdigo PL/SQL. SQL> DECLARE 2 3 4 5 6 VALOR END_CASA BEGIN VALOR := -- A atribuio ser feita na outra linha 'RUA A'; VARCHAR2(10); VARCHAR2(20);
7 END_CASA := /* a atribuio vir a seguir */ 'RUA B S/N'; 8 END; 9 / Procedimento PL/SQL concludo com sucesso
11
12
13
t_empregado%ROWTYPE
PL/SQL Exemplo
DECLARE Var_RA ALUNO.cod_aluno%TYPE; Var_NOME ALUNO.NOME%TYPE; BEGIN SELECT cod_aluno, NOME INTO Var_RA, Var_NOME FROM ALUNO WHERE cod_aluno=1; DBMS_OUTPUT.PUT_LINE(Var_RA ||' - '|| Var_NOME); END; Obs.: || utilizado para concatenao.
15
16
17
18
PL/SQL - IF
O comando IF verifica uma condio. Sintaxe
20
PL/SQL - IF
Exemplos:
If Var1 > 10 then Var2 := Var1 + 20 ; Else Var2 := Var1 * Var1 ; End If ;
If Var1 > 10 then Var2 := Var1 + 20; Else IF Var1 between 5 and 8 then Var2 := 2 * Var1 ; Else Var2 := Var1 * Var1; End If; End If;
21
PL/SQL - GoTo
Caractersticas do GoTo: Desvio incondicional para um Label; O Label deve ser nico dentro do escopo; Raramente utilizado, existem recursos mais recomendados.
22
NUMBER := 0;
LABEL
Executa a ao de Desvio
23
24
25
Condio - uma varivel booleana ou uma expresso que evolui para (TRUE, FALSE ou NULL).
26
Exerccio.
Atravs de uma instruo PL/SQL insira na tabela FUNCAO (da esquerda) os registros exibidos na figura da direita.
28
Exerccio.
Atravs de uma instruo PL/SQL insira na tabela FUNCAO (da esquerda) os registros exibidos na figura da direita.
DECLARE varContador FUNCAO.cod_funcao%TYPE := 7; BEGIN LOOP INSERT INTO funcao(cod_funcao, nome_funcao, salario) values (varContador, 'padrao', 0.0); varContador:= varContador + 1; Exit when varContador > 10; END LOOP; Prof. Mario Godoy END;
29
Exemplo: Declare varX number; Begin FOR varX IN 1..10 LOOP dbms_output.put_line ('Loop num: ' || varX); END LOOP; End;
Prof. Mario Godoy
30
Exemplo 2:
Declare varX number; varIni number := 10; varFim number := 25; Begin FOR varX IN varIni..varFim LOOP dbms_output.put_line ('Loop num: ' || varX); END LOOP; End;
31
Stored Procedure
Stored Procedure
Stored Procedure (procedimentos armazenados), um conjunto de comandos SQL armazenados; Procedures podem utilizadas programao PL/SQL; atravs da linguagem de
Diferena bsica entre Procedure e Function no Oracle: OBRIGATRIAMENTE uma Function deve retornar um valor; Procedures podem ou no retornar valores; Funes s retornam um nico resultado; Procedures podem retornar mais de um resultado.
34
IS ou AS
CREATE [OR REPLACE] PROCEDURE procedure_name [ (parametro modo tipo_de_dado) ] IS IN , OUT ou IN OUT [declaration_section] Incio do corpo do PL/SQL. BEGIN Aes executadas na procedure executable_section; uma declarao necessria [EXCEPTION Opcional exception_section] END procedure_name;
Fim da instruo
Prof. Mario Godoy
35
36
Se uma procedure declarada como a seguir: Create or replace procedure add_salario (var_cod_func IN t_funcionario.cod_func%TYPE)
37
38
39
40
possvel debugar erros atravs dos comandos: SHOW ERRORS PROCEDURE Nome_Da_Procedure ou SHOW ERRORS Nome_Da_Procedure
41
42
43
44
45
BEGIN Inserir_Depto('d0008', 'Paulo Afonso', 'Seguro'); Inserir_Depto('d0009', 'Delmiro Gouveia', 'Servios Gerais'); END;
46
48
49
50
Materiais de apoio
http://www.htmlstaff.org/postgresqlmanual/sql-commands.html (comandos SQL - PostgreSQL) http://info.abril.com.br/download/4346.shtml download) (Oracle 10g free
http://www.w3schools.com/sql/sql_tryit.asp
51