Engenharia da Computação

BANCO DE DADOS II
Aula 8
(10/06) mario.godoy@univasf.edu.br

Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia de Computação – CECOMP

PL/SQL Procedural Language/Structured Query Language

Linguagem PL/SQL
A linguagem PL/SQL permite: Constantes; Variáveis; Subprogramas (procedures e funções); Instruções condicionais; Controle de erros de execução; Encapsulamento; Interface com rotinas escritas em outras linguagens.

Prof. Mario Godoy

3

PL/SQL - Sintaxe

Declare

ooo
Begin

Variáveis PL/SQL utilizadas Ações executáveis Opcional! O que fazer em caso de erro.

ooo
Exception

ooo
End;

Prof. Mario Godoy

4

Melhor performance.Benefícios PERFORMANCE A PL/SQL pode: Reduzir o tráfego na rede pelo envio de um bloco contendo diversos comandos de SQL agrupados. Portabilidade – este código roda em qualquer sistema operacional e plataforma. Prof. Mario Godoy 5 Comentários Comentários em PL/SQL: Comentário de linha: “--” Comentário de bloco de código: /* (início) */ (fim) Prof. desde que exista o Oracle instalado. Reuso de programação o código pode ser compartilhado com diversas aplicações (Stored Procedure). Mario Godoy 6 .PL/SQL .

Mario Godoy 7 PL/SQL – Declarando Contantes Exemplo: DECLARE varPI . Boa prática varNome Prof. Prof. do. entre outras. Mario Godoy 8 . CONSTANT NUMBER(9. if. BEGIN . while.PL/SQL – Palavras Reservadas Não devem ser utilizados na declaração de variáveis.1415927.. Evite usar os mesmos nomes das colunas das tabelas.7) := 3.... end. else. END.

nome_aluno INTO FROM varMatricula.: não inicializadas recebem o valor NULL (v4).. varNome aluno Where . Mario Godoy 10 .PL/SQL – Declarando Variáveis Exemplos: DECLARE v1 v2 v3 ... BEGIN . Utilizando um comando SELECT com a cláusula INTO: SELECT matricula_aluno. NUMBER(4):= 1. Prof. Mario Godoy 9 PL/SQL – Atribuição Podemos atribuir valores às variáveis de duas maneiras: Utilizando o operador de atribuição: total := varQuant * varValor. v4 NUMBER(4). SELECT INTO é utilizado para que o resultado seja armazenado em variáveis.. Prof. NUMBER(4) NOT NULL := 1.. END... Obs. NUMBER(4):= DEFAULT 1.

9 / Procedimento PL/SQL concluído com sucesso Prof. Mario Godoy 12 . 7 END_CASA := /* a atribuição virá a seguir */ 'RUA B S/N'. VARCHAR2(20). 8 END. SQL> DECLARE 2 3 4 5 6 VALOR END_CASA BEGIN VALOR := -.A atribuição será feita na outra linha 'RUA A'. Prof. Mario Godoy 11 PL/SQL – Select Into Características do Select Into Manipular os dados obtidos pelo select.Comentários . VARCHAR2(10). Faz somente leitura de uma linha.Exemplo Exemplo de código PL/SQL.

de colunas ou até da linha inteira de uma tabela. DECLARE varRegistro_emp BEGIN SELECT * INTO varRegistro_emp FROM t_empregado WHERE.. Mesmos Nomes.nome_da_subvariável Prof.. Herdando o tipo de uma linha inteira de uma tabela: nome_da_variavel nome_da_tabela%Rowtype. Variável composta de diversas subvariáveis. Desnecessário conhecer em detalhe a tabela base. Herdando o tipo de uma variável previamente declarada: nome_da_variavel_2 nome_da_variavel_1%Type. Tipos.%ROWTYPE Herda a definição de um registro. Prof. Referenciar: varRegistro_emp. Mario Godoy 14 t_empregado%ROWTYPE . Tamanhos e Ordem dos campos especificados no comando SELECT.PL/SQL – Tipos de Dados Constantes e variáveis podem herdar o tipo de outras variáveis. Herdando o tipo de uma coluna de uma tabela: nome_da_variavel nome_da_tabela.nome_da_coluna%Type. Mario Godoy 13 PL/SQL – Tipo de Dado .

END.NOME%TYPE. END. Obs.cod_aluno%TYPE. Var_NOME FROM ALUNO WHERE cod_aluno=1.'|| Var_NOME).PL/SQL – Exemplo DECLARE Var_RA ALUNO. Nome_Depto) VALUES ('d0020'. DBMS_OUTPUT.'Aracaju'. NOME INTO Var_RA. Prof. Nome_Depto=‘Testes’ BEGIN INSERT INTO t_departamento (cod_depto. Mario Godoy 16 . Prof. localizacao. BEGIN SELECT cod_aluno. Var_NOME ALUNO.: “||” utilizado para concatenação. Mario Godoy 15 Exercícios 1 . Localizacao=‘Aracaju’.Utilizando PL/SQL Adicione o seguinte registro na tabela t_departamento: cod_depto=‘d0020’. 'Testes').PUT_LINE(Var_RA ||' .

o registro cujo BEGIN DELETE FROM t_departamento WHERE cod_depto='d0020'.Utilizando PL/SQL Altere a localização do departamento ‘d0020’ para ‘Paulo Afonso’. t_departamento. Mario Godoy 17 Exercícios 3 . Prof. END. Prof.Exercícios 2 . na tabela t_departamento abaixo: BEGIN update t_departamento set localizacao='Paulo Afonso' where cod_depto='d0020'. END. Mario Godoy 18 .Utilizando PL/SQL Exclua da tabela cod_depto=‘d0020’.

IF (CONDIÇÃO) THEN <Intrução> END IF. Mario Godoy 20 .PL/SQL Comandos de decisão Condicional PL/SQL .IF O comando IF verifica uma condição. Sintaxe IF (CONDIÇÃO) THEN <Intrução> ELSE / [ELSEIF] <Intrução> END IF. Prof.

Else Var2 := Var1 * Var1 . Mario Godoy 22 . Prof. Raramente utilizado. End If.GoTo Características do GoTo: Desvio incondicional para um Label. existem recursos mais recomendados. Mario Godoy 21 PL/SQL . Else IF Var1 between 5 and 8 then Var2 := 2 * Var1 .IF Exemplos: If Var1 > 10 then Var2 := Var1 + 20 .PL/SQL . Else Var2 := Var1 * Var1. End If. Prof. O Label deve ser único dentro do escopo. End If . If Var1 > 10 then Var2 := Var1 + 20.

LABEL Executa a ação de Desvio Prof. Procedimento PL/SQL concluído com sucesso. Desvio para dentro de um sub-bloco (GoTo sub bloco). Desvio para dentro de um bloco a partir da área de exceção (GoTo Início). NUMBER := 0. IF varConta < 5 THEN GOTO INICIO.PL/SQL – Goto .PUT_LINE(varConta). END. Desvio para fora de um subprograma (GoTo Para_Fora).Exemplo DECLARE varConta BEGIN <<INICIO>> varConta := varConta + 1.Restrições Quando não pode utilizar Goto: Desvio para dentro de um IF ou Loop (GoTo Proximo_IF). DBMS_OUTPUT. Mario Godoy 24 . Mario Godoy 23 PL/SQL – Goto . Prof. END IF.

LOOP Sintaxe LOOP Instrução_n.é uma variável booleana ou uma expressão que evolui para (TRUE. Condição . END LOOP.PL/SQL Estruturas de controle LOOP FOR WHILE Prof. Mario Godoy 25 PL/SQL Estruturas de controle . Mario Godoy 26 . FALSE ou NULL). Prof. … EXIT [WHEN condição].

Através de uma instrução PL/SQL insira na tabela FUNCAO (da esquerda) os registros exibidos na figura da direita. Mario Godoy 27 Exercício. END. END LOOP. varContador number(2) := 1. BEGIN LOOP INSERT INTO T_ITENS(Nome_Item) values (varNomeItem). varContador:= varcontador+1.PL/SQL Estruturas de controle .LOOP Exemplo de um código para Inserir 10 registros na tabela T_Itens: Exemplo DECLARE varNomeItem T_ITENS. Prof. Prof. Exit when varcontador >10. Mario Godoy 28 .Nome_item%TYPE := ‘Caneta’.

Mario Godoy END. 0. Prof. maior_valor )] LOOP Instrução 1. varContador:= varContador + 1.. Sintaxe: FOR variavel_de_controle IN [REVERSE ( menor_valor . salario) values (varContador.FOR O comando FOR permite que controle o número de vezes que as ações foram repetidas e define quando termina essa repetição.Exercício.. END LOOP.put_line ('Loop num: ' || varX).0). 29 PL/SQL Estruturas de controle . Exemplo: Declare varX number. Begin FOR varX IN 1. Mario Godoy 30 . 'padrao'. DECLARE varContador FUNCAO. Exit when varContador > 10. Instrução n. BEGIN LOOP INSERT INTO funcao(cod_funcao. nome_funcao.cod_funcao%TYPE := 7. End. END LOOP.10 LOOP dbms_output. Através de uma instrução PL/SQL insira na tabela FUNCAO (da esquerda) os registros exibidos na figura da direita. END LOOP. Prof.

varFim LOOP dbms_output. Begin WHILE varX < 10 LOOP dbms_output. Mario Godoy 32 . END LOOP. Prof. varX := varX + 1. End.. End. Mario Godoy 31 PL/SQL Estruturas de controle . Instrução n. Prof. Begin FOR varX IN varIni. END LOOP.FOR O comando FOR permite que controle o número de vezes que as ações foram repetidas e define quando termina essa repetição. END LOOP.. Instrução n. varIni number := 10. Sintaxe WHILE condição LOOP Instrução 1. varFim number := 25.put_line ('Loop num: ' || varX). Exemplo 2: Declare varX number. END LOOP. Sintaxe: FOR variavel_de_controle IN [REVERSE ( menor_valor .put_line(varX). maior_valor )] LOOP Instrução 1. Exemplo: Declare varX number := 0.WHILE O comando WHILE verifica uma condição a cada início de execução.PL/SQL Estruturas de controle .

Procedures podem retornar mais de um resultado.Stored Procedure Stored Procedure Stored Procedure (procedimentos armazenados). Mario Godoy 34 . Procedures podem ou não retornar valores. Funções só retornam um único resultado. através da linguagem de Diferença básica entre Procedure e Function no Oracle: OBRIGATÓRIAMENTE uma Function deve retornar um valor. é um conjunto de comandos SQL armazenados. Prof. Procedures podem utilizadas programação PL/SQL.

. BEGIN Ações executadas na procedure executable_section. OUT . Prof. Exemplo: Se uma procedure é declarada como a seguir: Create or replace procedure add_bonus (var_cod_func IN t_funcionario.Stored Procedure – Criação SINTAXE CRIA [ou Substitui] Nome da Procedure IS ou AS CREATE [OR REPLACE] PROCEDURE procedure_name [ (parametro modo tipo_de_dado) ] IS IN . Um dado deve ser informado na chamada da procedure add_bonus(00001). IN OUT . OUT ou IN OUT [declaration_section] Início do corpo do PL/SQL.Indica que o parâmetro é de saída. uma declaração é necessária [EXCEPTION Opcional exception_section] END procedure_name.Indica que o parâmetro é de entrada e saída.. Mario Godoy 35 Stored Procedure – Modos de Parâmetro Existem três modos de parâmetros que podem ser declarados: IN .cod_func%TYPE) . Mario Godoy 36 . Fim da instrução Prof.Indica que o parâmetro é de entrada (Default).

PUT_LINE('Minha mensagem qualquer!'). END. END. begin procMensagem(). Mario Godoy end. %ROWTYPE. Se uma procedure é declarada como a seguir: Create or replace procedure add_salario (var_cod_func IN t_funcionario. 38 . Obs.Stored Procedure – Tipos de Dados Os TIPOS de dados de parâmetro pode ser: Qualquer tipo de dado do Oracle ou do PL/SQL. Mario Godoy 37 Stored Procedure – Criação da estrutura básica Estrutura básica para criação de uma procedure. O código abaixo exibe uma mensagem para o usuário. Prof. Referencias como %TYPE.: este trecho pode ser utilizado como modelo para futuras procedures.cod_func%TYPE) Referencia o mesmo tipo e tamanho de dado da coluna cod_func da tabela t_funcionario Prof. CREATE OR REPLACE PROCEDURE procBasico IS BEGIN NULL. CREATE OR REPLACE PROCEDURE procMensagem IS BEGIN DBMS_OUTPUT.

nome_do_BD. END. Executar um procedimento em um servidor remoto: exec nome_do_servidor. 'parametro_n'). CALL BuscaCliente 'Pedro‘. Mario Godoy 39 Stored Procedure – Excluindo uma Procedure Excluindo uma procedure do banco: Drop PROCEDURE Nome_da_Pocedure Prof. Mario Godoy 40 .nome_do_procedimento. exec BuscaCliente 'Pedro‘. Outras formas de Executar uma Stored Procedure: execute BuscaCliente 'Pedro‘.Stored Procedure . Prof.Executando Através de PL/SQL: BEGIN Nome_da_Procedure('parametro_1 '. BuscaCliente 'Pedro‘.

Usuário Visualizar as procedures do usuário: SELECT object_name. Prof. Mario Godoy 42 . Mario Godoy 41 Stored Procedure . temos: Warning: Procedure created with compilation errors. object_type FROM user_objects WHERE object_type in ('PROCEDURE') ORDER BY object_name.Stored Procedure – Erros e Debug Ao criar uma procedure com erros de compilação. É possível “debugar” erros através dos comandos: SHOW ERRORS PROCEDURE Nome_Da_Procedure ou SHOW ERRORS Nome_Da_Procedure Prof.

Exemplo DESC inserir_depto Prof. Mario Godoy 44 .Stored Procedure – Argumentos Para visualizar os argumentos de uma procedure já criada: Sintaxe DESC Nome_da_Procedure. Mario Godoy 43 Stored Procedure – Exemplos Tabela: T_Departamento Prof.

varNOME_DEPTO). nome_depto) values (varCOD_DEPTO.Localizacao%TYPE. Prof.cod_depto%TYPE. END Inserir_Depto. varNOME_DEPTO IN T_DEPARTAMENTO.nome_depto%TYPE ) IS BEGIN INSERT INTO T_DEPARTAMENTO(cod_depto. localizacao.Stored Procedure – Exemplo Insert Construindo uma procedure para INSERIR dados em uma tabela: CREATE or REPLACE PROCEDURE Inserir_Depto( varCOD_DEPTO IN T_DEPARTAMENTO. 'Seguro'). END. varLOCALIZACAO IN T_DEPARTAMENTO. Mario Godoy 45 Stored Procedure – Exemplo Insert Executando a procedure INSERIR_DEPTO já criada: BEGIN Inserir_Depto('d0008'. Inserir_Depto('d0009'. Prof. Mario Godoy 46 . varLOCALIZACAO. 'Paulo Afonso'. 'Serviços Gerais'). 'Delmiro Gouveia'.

Prof.'Recife'. END.nome_depto%TYPE ) IS BEGIN UPDATE T_DEPARTAMENTO SET localizacao = varLOCALIZACAO.cod_depto%TYPE. END ALTERAR_Depto. nome_depto = varNOME_DEPTO WHERE cod_depto = varCOD_DEPTO. Mario Godoy 48 . Prof. ALTERAR_Depto('d0007'. varNOME_DEPTO IN T_DEPARTAMENTO. varLOCALIZACAO IN T_DEPARTAMENTO.'Maceio'. Mario Godoy 47 Stored Procedure – Exemplo UPDATE Executando a procedure ALTERAR_DEPTO criada: BEGIN ALTERAR_Depto('d0009'. 'Logistica').Stored Procedure – Exemplo UPDATE Construindo uma procedure para ALTERAR dados em uma tabela: CREATE or REPLACE PROCEDURE ALTERAR_Depto( varCOD_DEPTO IN T_DEPARTAMENTO.Localizacao%TYPE. 'Produção').

Mario Godoy 49 Stored Procedure – Exemplo DELETE Executando a procedure APAGA_DEPTO criada: BEGIN Apaga_Depto('d0008'). Prof. END. END Apaga_Depto.cod_depto%TYPE ) IS BEGIN DELETE FROM t_DEPARTAMENTO WHERE COD_depto = varCOD_DEPTO. Prof. Mario Godoy 50 .Stored Procedure – Exemplo DELETE Construindo uma procedure para APAGAR dados em uma tabela: CREATE or REPLACE PROCEDURE Apaga_Depto( varCOD_DEPTO IN T_DEPARTAMENTO.

com.htmlstaff.br/download/4346.org/postgresqlmanual/sql-commands. Mario Godoy 51 .w3schools.asp Prof.Materiais de apoio http://www.html (comandos SQL .abril.PostgreSQL) http://info.com/sql/sql_tryit.shtml download) (Oracle 10g free http://www.

Sign up to vote on this title
UsefulNot useful