Buscar

teorico_III

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Inserir Título Aqui 
Inserir Título Aqui
Linguagens de 
Banco de Dados
Programando em SQL I
Responsável pelo Conteúdo:
Prof. Me. Alexander Gobbato Paulino Albuquerque
Revisão Textual:
Prof. Esp. Claudio Pereira do Nascimento
Nesta unidade, trabalharemos os seguintes tópicos:
• Introdução;
• O que é PL/SQL?
• Estrutura de Repetição WHILE LOOP;
• Instrução de Repetição FOR LOOP;
• Instrução Exit;
• Cursores.
Fonte: iStock/Getty Im
ages
Objetivos
• Abordar o conceito de programação para banco de dados PL/SQL;
• Demonstrar que os comandos de banco de dados vão além de montar estrutura para o 
armazenamento de informações e de manipulação de informações;
• Demonstrar o funcionamento das variáveis, a utilização de estrutura condicionais e 
estrutura de repetição e por fim introduziremos o conceito de cursor para armazenarmos 
os resultados em memória.
Caro Aluno(a)!
Normalmente, com a correria do dia a dia, não nos organizamos e deixamos para o 
último momento o acesso ao estudo, o que implicará o não aprofundamento no material 
trabalhado ou, ainda, a perda dos prazos para o lançamento das atividades solicitadas.
Assim, organize seus estudos de maneira que entrem na sua rotina. Por exemplo, você 
poderá escolher um dia ao longo da semana ou um determinado horário todos ou alguns 
dias e determinar como o seu “momento do estudo”.
No material de cada Unidade, há videoaulas e leituras indicadas, assim como sugestões 
de materiais complementares, elementos didáticos que ampliarão sua interpretação e 
auxiliarão o pleno entendimento dos temas abordados.
Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de 
discussão, pois estes ajudarão a verificar o quanto você absorveu do conteúdo, além de 
propiciar o contato com seus colegas e tutores, o que se apresenta como rico espaço de 
troca de ideias e aprendizagem.
Bons Estudos!
Programando em SQL I
UNIDADE 
Programando em SQL I
Introdução
Olá pessoal, nesta unidade continuaremos usando o ambiente que foi criado ante-
riormente. Caso necessário, reveja o material complementar e realize todos os proce-
dimentos novamente para ter um ambiente onde possa efetuar os testes.
Vamos relembrar, além de comando de DDL (Data Definition Language) e DML 
(Data Manipulation Language), podemos trabalhar com programação para banco 
de dados. A programação que iremos estudar se aplica nas criações de Cursores, 
Triggers, Procedimentos e Funções.
Iremos abordar os seguintes itens dos comandos PL/SQL como criação de variá-
veis, estrutura de repetições, estrutura condicional para então criarmos os cursores e 
entender então o que é um bloco de programação PL/SQL
O que é PL/SQL?
Linguagem PL/SQL (Procedural Language extensions to SQL) foi introduzida no 
ano de 1988 como parte do conjunto de tecnologias que compunha a versão 6.0 do 
SGBD Oracle. Permite a criação e desenvolvimento de programas que são armazenados, 
compilados e executados no servidor de banco de dados Oracle.
Quando Utilizar PL/SQL?
Uma das vantagens de utilizar PL/SQL é o fato de a linguagem tornar possível a cons-
trução de aplicações eficientes para a manipulação de grandes volumes de dados. Como 
o bloco PL/SQL é executado no SGDB, os dados manipulados não precisam entrar ou 
sair do SGBD, portanto, não há a necessidade de se trafegar pela rede. A eficiência da 
PL/SQL também é garantida através da sua forte integração com a linguagem. É possível 
executar comandos de SQL diretamente de um bloco PL/SQL, sem a necessidade da 
utilização de APIs intermediárias (como ODBC ou JDBC).
Resumindo, com os comandos PL/SQL podemos alterar, excluir, inserir, selecionar, 
criar variáveis, constantes, cursores, realizar tratamentos de erros/exceções e trabalhar 
com estrutura de repetições e decisões.
Este link lhe dará uma ideia do que é API, vale a pena a leitura. 
Disponível em: https://goo.gl/hSc8Sh.
Você sabia que um código escrito em PL/SQL pode ser utilizado em diferentes ver-
sões do SGBD, ou seja, na maioria dos casos, os códigos são compatíveis mesmo entre 
versões diferentes. Isso é muito interessante, não concordam?
Agora que já falamos um pouquinho sobre bloco PL/SQL, vamos começar então 
em um item muito importante, como iniciar um bloco PL/SQL?
6
7
Figura 1
Vamos ver um exemplo práticos substituindo os elementos por comando de verdade.
Figura 2
O resultado após a execução do código é:
Figura 3
Vejamos entende esse trecho de código.
Na linha 1 declaramos o início do bloco PL/SQL, na linha 2 criamos as declara-
ções, nesse caso criamos uma variável do tipo texto e atribuímos a essa variável o 
valor ‘Alexander Gobbato P. Albuquerque’.
Na linha seguinte (3) criamos o bloco onde será inserido os comandos, o bloco é ini-
ciado com o comando BEGIN e é finalizado com o comando END (linha 5).
Toda a programação será inserida entre esses comandos.
O comando dbms_output.put_line imprime o resultado na tela, ou seja, exibe 
alguma informação. 
E agora, o que é essa variável que o professor mencionou acima?
As variáveis podem auxiliar os programadores no armazenamento de dados tem-
porariamente enquanto um determinado código está em execução, vejamos então a 
sintaxe do comando para a criação de uma variável.
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_
value]
7
UNIDADE 
Programando em SQL I
Parâmetros ou Argumentos
• variable_name
O nome a atribuir à variável.
• [CONSTANT] 
Opcional. Se especificado, o valor da variável é constante e não pode ser alterado.
• datatype
O tipo de dados a atribuir à variável.
Vamos relembrar um pouquinho, vocês já viram que na criação de uma estrutura 
de tabelas devemos definir tipos de dados para as colunas.
Para as variáveis temos o mesmo conceito, ou seja, podemos criar tipos de dados 
texto, numérico, datas e booleanos.
• Texto (char, varchar2);
• Numérico (number);
• Data (Date, TimeStamp);
• Booleanos (Boolean).
Figura 4
Resultado:
Figura 5
A cláusula INTO atribui o resultado das colunas escritas no comando SELECT para as 
respectivas variáveis, ou seja, o valor da coluna first_name será armazenada na variável 
nome, o valor da coluna last_name será armazenada na variável sobrenome.
Temos também o elemento %Type.
8
9
%TYPE
É muito comum a utilização do atributo %type. O atributo %type permite declarar 
um item de dados do mesmo tipo de dados como uma variável ou coluna declarada 
anteriormente (sem saber qual é esse tipo). Se a declaração do item referenciado for 
alterada, a declaração do item de referência será alterada de acordo.
O atributo %TYPE é particularmente útil ao declarar variáveis para manter os valores 
do banco de dados. A sintaxe para declarar uma variável do mesmo tipo que uma coluna é:
variable_name table_name.column_name%TYPE;
Vamos por em prática esse exemplo:
Observem no bloco PL/SQL abaixo a variável nome e sobre estão definidas com 
o mesmo tipo das colunas da tabela employees.
Figura 6
Resultado:
Figura 7
Agora que já sabemos para que serve e como utilizar uma variável, já podemos 
então começar a falar de estrutura de decisão.
A instrução IF-THEN-ELSE é utilizada para que se possa oferecer condições para 
que o sistema execute o código quando a condição for verdadeira (TRUE) ou quando 
a condição verificada seja falsa (FALSE).
Existem algumas formas de utilizarmos o comando de declaração IF-THEN-ELSE.
9
UNIDADE 
Programando em SQL I
Sintaxe (IF-THEN)
IF condition THEN
 {...statements to execute when condition is TRUE...}
END IF;
A sintaxe IF-THEN é utilizada apenas quando queremos que o programa execute a 
condição quando for VERDADEIRA.
Sintaxe (IF-THEN-ELSE)
IF condition THEN
 {...statements to execute when condition is TRUE...}
ELSE
 {...statements to execute when condition is FALSE...}
END IF;
A sintaxe IF-THEN-ELSE é utilizada quando temos instruções diferentes a serem 
executadas quando a condição for VERDADEIRA das instruções quando a condição 
for FALSA.
Sintaxe (IF-THEN-ELSIF)
IFcondition1 THEN
 {...statements to execute when condition1 is TRUE...}
ELSIF condition2 THEN
 {...statements to execute when condition2 is TRUE...}
END IF;
A sintaxe IF-THEN-ELSIF é utilizada quando você tem mais de 2 condições para 
testar e para cada condição de instruções diferentes.
Sintaxe (IF-THEN-ELSIF-ELSE)
IF condition1 THEN
 {...statements to execute when condition1 is TRUE...}
ELSIF condition2 THEN
 {...statements to execute when condition2 is TRUE...}
ELSE
 {...statements to execute when both condition1 and condition2 
 are FALSE...}
END IF;
10
11
A sintaxe IF-THEN-ELSIF-ELSE é utilizada quando você tem mais de 2 condições 
para testar e para cada condição de instruções diferentes. Caso as condições forem 
FALSAS, o programa irá executar as instruções que foram inseridas na opção ELSE.
Quando uma condição for (VERDADEIRO) TRUE, a instrução IF-THEN-ELSE somente execu-
tará a instrução correspondente e não será avaliada as demais instruções.
Se nenhuma condição for atendida, a parte ELSE da instrução IF-THEN-ELSE será executa-
da. É importante notar que as opções ELSIF e ELSE não são obrigatórias.
Após essas explicações da sintaxe, você deve estar se perguntando: “Como posso 
aplicar essa estrutura de decisão em um caso real?”
Para demonstrar a utilização, vamos utilizar a estrutura da base de dados HR.
Vamos imaginar a seguinte situação, se você pesquisar a tabela EMPLOYEES, irá 
ver que existe uma coluna chamada SALARY, se o valor nessa coluna for menor do 
3000, devemos exibir a informação ‘REAJUSTAR EM 25%’, se o valor for maior ou 
igual a 3000 e menor do que 7000, exibir ‘REAJUSTAR EM 10%’ e para qualquer 
outro valor exibir ‘REAJUSTAM EM 3%’. Para resolver esse problema, iremos mon-
tar um bloco PL/SQL com estrutura de decisão.
Figura 8
Resultado:
Figura 9
No exemplo acima vimos o funcionamento da estrutura de repetição, que aten-
de somente quando a variável tiver apenas um único valor, e se caso o retorno do 
SELECT retornasse uma quantidade maior de registros, como poderíamos resolver 
esse desafio? A resposta vem logo abaixo, utilizando a estrutura de repetição.
11
UNIDADE 
Programando em SQL I
Estrutura de Repetição WHILE LOOP
A estrutura de repetição WHILE LOOP é utilizando quando o programador não 
tem ao certo a quantidade de vezes que as instruções precisam ser executadas.
Sintaxe:
WHILE condition
LOOP
 {...statements...}
END LOOP;
Parâmetros ou Argumentos
• condition
Avaliar cada passagem pelo loop. Se a condição for avaliada como VERDADEI-
RA, a instrução da estrutura de repetição é executada. Se a condição for avaliada 
em FALSO, a estrutura de repetição é finalizada.
• statements
Instruções a serem executadas.
Como a instrução WHILE é avaliada antes de executar a estrutura de repetição, é possível 
que a instrução nunca seja executada caso o resultado da condição seja FALSO.
Exemplo:
WHILE monthly_value <= 4000
LOOP
 monthly_value:= daily_value * 31;
END LOOP;
Neste exemplo WHILE LOOP, a repetição se encerraria quando o valor mensal 
excedesse 4000 conforme especificado na condição abaixo:
WHILE monthly_value <= 4000
O WHILE LOOP continuará enquanto o valor mensal <= 4000. E uma vez que o 
valor mensal é> 4000, o ciclo terminará.
12
13
Instrução de Repetição FOR LOOP
A instrução FOR LOOP permite que você execute as instruções por uma quantidade 
de vezes definida.
Sintaxe:
FOR loop_counter IN [REVERSE] lowest_number..highest_number
LOOP
 {...statements...}
END LOOP;
Parâmetros ou Argumentos
• loop_counter
Variável controladora da repetição.
• [REVERSE]
Opcional. Se especificado, o contador de loop contará no sentido inverso.
• lowest_number
O valor inicial para loop_counter.
• highest_number
O valor final para loop_counter.
• statements
Instruções a serem executadas.
A instrução FOR LOOP é utilizada quando queremos executar as instruções e o número de 
vezes que será definido na estrutura. Se precisarmos inverter a contagem, ou seja, se o 
REVERSE for especificado, então o número mais alto será o valor inicial para loop_counter 
e o valor mais baixo será o valor final para loop_counter.
Exemplo:
FOR Lcntr IN 1..20
LOOP
 LCalc := Lcntr * 31;
END LOOP;
Este exemplo acima, o FOR LOOP será executado 20 vezes. O contador chamado 
Lcntr começará em 1 e terminará em 20.
13
UNIDADE 
Programando em SQL I
Você pode usar o modificador REVERSE para executar o FOR LOOP na or-
dem inversa.
Exemplo:
FOR Lcntr IN REVERSE 1..15
LOOP
 LCalc := Lcntr * 31;
END LOOP;
Este exemplo FOR LOOP será loop 15 vezes. No entanto, como REVERSE é es-
pecificado, o contador chamado Lcntr começará em 15 e terminará em 1, ou seja, um 
loop do final para o início.
Instrução Exit
A instrução EXIT é mais usada para encerrar instruções LOOP, ou seja, mesmo 
que o LOOP não chegou ao fim, é possível interromper o processo e sair da estru-
tura de repetição.
Sintaxe:
EXIT [WHEN boolean_condition];
Parâmetros ou Argumentos
• Boolean_condition
Opcional. É a condição para terminar o LOOP.
Exemplo:
LOOP
 montante := valor * 31;
 EXIT WHEN montante > 4000;
END LOOP;
Vamos ver na prática então como funciona os elementos de estrutura de repetição. 
Observe nos exemplos abaixo que mesmo utilizando comando de repetição diferente 
podemos obter o mesmo resultado.
Na estrutura que utiliza o WHILE, precisamos obrigatoriamente definir a variável 
que será a responsável por controlar a repetição e não podemos esquecer de incre-
mentá-la para que não fique em um loop infinito.
14
15
Figura 10
Resultado:
Figura 11
Já no exemplo utilizando a estrutura FOR, a variável de controle não precisa ser 
criada na declaração, a variável já estará criada implicitamente nessa estrutura.
Figura 12
Resultado:
Figura 13
15
UNIDADE 
Programando em SQL I
Figura 14
Resultado:
Figura 15
Deve ter ficado uma pergunta na mente de vocês, para que eu vi os tipos de estru-
turas de repetição? A resposta é: “Porque nós precisaremos verificar várias informa-
ções que estarão em memória!”.
Como assim? 
Vamos lá, quando a nossa instrução de seleção retornar mais de um registro e 
precisarmos analisar todos os registros, estes serão colocados em memória. Para 
percorremos essas informações na memória, precisamos saber como funciona a 
estrutura de repetição, pois bem, a esse conjunto de registro que ficou armazenado 
em memória iremos alocá-los em cursores. 
Cursores
Os cursores são recursos empregados na manipulação de informações. Por meio 
dos cursores podemos utilizar instruções SELECT, como também INSERÇÃO, AL-
TERAÇÃO e EXCLUSÃO.
Nos exemplos a seguir iremos utilizar a tabela chamada employees que pertence a 
base de dados HR. No momento da instalação do Oracle 11g, essa tabela foi criada 
e inserido valores nela, qualquer dúvida, consulte o material das unidades anteriores 
para a instalação e configuração.
16
17
Os cursores são utilizados para que se possa armazenar os valores de retorno da instrução 
SELECT, permitindo que acessemos o valor que está em memória.
Vamos ao passo a passo para a criação do cursor e suas funcionalidades.
No exemplo a seguir, a instrução SELECT armazena o retorno da instrução em uma 
variável de nome cur1.
CURSOR cur1
IS
 SELECT first_name
 FROM employees;
Para acessarmos os valores que foram armazenados no cursor, ou seja, colocados 
em memória, devemos abrir o cursor.
OPEN cur1;
A finalidade de usar um cursor, na maioria dos casos, é recuperar as linhas do cursor para 
que algum tipo de operação possa ser executado. Depois de declarar e abrir o cursor, a 
instrução FETCH irá buscar as linhas do cursor que foi aberto.
Sintaxe:
FETCH cursor_name INTO variable_list;
Parâmetros ou Argumentos
• cursor_name
O nome do cursor que você deseja buscar linhas.
• variable_list
A lista de variáveis, delimitada por vírgula, que você deseja armazenar o conjunto 
de resultados do cursor.
No exemplo a seguir, o valor que foi armazenado na memória está sendo repassadopara a variável cnumber.
FETCH cur1 into cnumber;
Podemos utilizar uma lista de variáveis para recuperamos informações dos cursores, para 
isso, a quantidade de campos do SELECT deve ser a mesma quantidade de variáveis que 
se deve indicar depois da instrução INTO. Inclusive os tipos dos campos e os tipos das 
variáveis devem ser iguais.
17
UNIDADE 
Programando em SQL I
Como estamos trabalhando com cursores e estes deixam valores em memória, é 
importante removermos os valores da memória fechando o cursor.
CLOSE c1;
Quando trabalhamos com cursores, é importante determinarmos o status dele. O cursor 
pode ter um status de Aberto/Fechado, por exemplo.
Veja as opções de possíveis status do cursor.
%ISOPEN
• Retorna TRUE se o cursor estiver aberto, FALSE se o cursor estiver fechado.
%FOUND ou %NOTFOUND
• Retorna INVALID_CURSOR se o cursor for declarado, mas não aberto; ou se o 
cursor foi fechado;
• Retorna NULL se o cursor estiver aberto, mas a busca não foi executada;
• Retorna TRUE se uma busca foi executada;
• Retorna FALSE se nenhuma linha foi retornada.
%ROWCOUNT
• Retorna INVALID_CURSOR se o cursor for declarado, mas não aberto; ou se o 
cursor foi fechado.
• Retorna o número de linhas buscadas.
• O atributo ROWCOUNT não fornece a contagem real de linhas até que você 
tenha percorrido todo o cursor. Em outras palavras, você não deve confiar nesse 
atributo para informar quantas linhas estão em um cursor depois de aberto.
O principal uso do DBMS_OUTPUT é na depuração de blocos PL/SQL, sua procedure prin-
cipal é a PUT_LINE, que adiciona a mensagem, passada como parâmetro, ao seu buffer 
e adiciona também um caractere de nova linha no final, para que uma nova mensagem 
adicionada ao buffer fique em outra linha quando for exibida.
18
19
Vamos analisar alguns exemplos agora:
No exemplo abaixo, o select armazena o resultado na variável cursor de nome cur1, 
o cursor.
DECLARE cnumber number;
 CURSOR cur1
 IS
 SELECT EMPLOYEE_ID
 FROM EMPLOYEES
 WHERE FIRST_NAME = ‘Alexander’;
BEGIN
 OPEN cur1;
 FETCH cur1 INTO cnumber;
 if cur1%notfound then
 cnumber := 9999;
 end if;
 DBMS_OUTPUT.PUT_LINE(‘Id = ‘ || cnumber );
 CLOSE cur1;
END;
Resultado:
Id = 103
No exemplo acima, o retorno armazenado corresponde a apenas um campo e 
também possui somente um registro, isso devido a cláusula de restrição imposta 
no WHERE.
Quando trabalhamos com cursores, é possível armazenar em memória várias in-
formações de vários campos. Para acessarmos os valores armazenados, existe a ne-
cessidade de percorrermos registro a registro do cursor para verificarmos os valores. 
No exemplo de cursor abaixo, o comando select retorna mais de um registro, todos 
os registros são salvos em memória e por meio do LOOP podemos ter acesso a todos 
os registros.
19
UNIDADE 
Programando em SQL I
DECLARE 
 cnumber number; 
 cnome varchar2(100);
 CURSOR cur1
 IS
 SELECT EMPLOYEE_ID, FIRST_NAME
 FROM EMPLOYEES
 WHERE EMPLOYEE_ID < 105 ;
BEGIN
 OPEN cur1;
 LOOP
 FETCH cur1 INTO cnumber, cnome;
 DBMS_OUTPUT.PUT_LINE(‘Id = ‘ || cnumber || ‘ Nome: ‘ || cnome );
 EXIT WHEN cur1%notfound;
 END LOOP;
 CLOSE cur1;
END;
Resultado:
Figura 16
O CURSOR FOR LOOP é utilizado quando se tem a necessidade de buscar e processar todos 
os registros em um cursor. O CURSOR FOR LOOP só terminará quando todos os registros 
no cursor forem lidos.
Sintaxe:
FOR record_index in cursor_name
LOOP
 {...statements...}
END LOOP;
20
21
Parâmetros ou Argumentos
• record_index
O índice do registro.
• cursor_name
O nome do cursor do qual você deseja buscar registros.
• statements
As instruções de código para executar cada passagem pelo CURSOR FOR LOOP.
Neste exemplo, iremos armazenar no cursor todos os registros da tabela employees, 
mas somente os campos first_name e salary.
A instrução FOR employee_rec in c1 tem como objetivo localizar os valores do 
cursor linha a linha e repassar para a variável de employee_rec. A variável employee 
possui os atributos que foram selecionados da instrução: 
cursor c1 is
 SELECT first_name,salary
 FROM employees;
Nesse caso todos os dados armazenados na tabela employees serão colocados 
em memória.
DECLARE total_val number(6);
cursor c1 is
 SELECT first_name,salary
 FROM employees;
BEGIN
 total_val := 0;
 FOR employee_rec in c1
 LOOP
 total_val := total_val + employee_rec.salary;
 DBMS_OUTPUT.PUT_LINE(‘Empregado = ‘ || employee_rec.first_name );
 END LOOP;
 DBMS_OUTPUT.PUT_LINE(‘Total = ‘ || total_val );
END;
21
UNIDADE 
Programando em SQL I
Resultado:
Figura 17
Agora que chegamos ao final desta unidade, foi possível verificar e testar algumas 
instruções como criação e atribuição de variável, demostrar a funcionalidade da es-
trutura de decisão, entender o funcionamento da estrutura de repetição e, por fim, 
aplicar tudo na criação e utilização de cursores.
22
23
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
 Livros
Oracle Database 11g SQL: Domine SQ e PL/SQL no banco de dados Oracle
PRICE, Jason. Oracle Database 11g SQL: Domine SQ e PL/SQL no banco de 
dados Oracle. Porto Alegre: Editora Bookmam, 2009.
Oracle Database 11g SQL: Domine SQ e PL/SQL no banco de dados Oracle
ORACLE DATABASE 11G SQL. Porto Alegre: Editora Bookman, 2008. Ed.1. ISBN-
10: 857780335X. ISBN-13: 978-8577803354.
 Vídeos
PL/SQL tutorial 26: Introduction to PL/SQL Cursor in Oracle Database By Manish Sharma
https://youtu.be/_snAMqCBitg
PL/SQL tutorial 28: Cursor Parameter In Oracle Database By Manish Sharma
https://youtu.be/w1yeQq9DAYU
23
UNIDADE 
Programando em SQL I
Referências
PRICE, Jason. Oracle Database 11g SQL: Domine SQ e PL/SQL no banco de dados 
Oracle. Porto Alegre: Editora Bookmam, 2009.
PUGA, Sandra. Banco de dados: implementação em SQL, PL/SQL e oracle 11g. São 
Paulo: Pearson Education do Brasil, 2014. 328 p. ISBN 9788581435329.
24

Outros materiais