You are on page 1of 8

1

Aula 1 de PL/SQL Anotaes (21/07/12)


Site do professor: profventury.com

Software: PL/SQL Developer

Para importar a base de dados: Clicar em New / Command Window

@l:\cargabanco (esse o local e o nome da base a ser importada)

Depois, na jabela da esquerda, mudar o ttulo para my objects V em Tables e verifique que no tem a tabela mensagem. (No tem que ter)

Tipos de lgicas em um sistema:


Apresentao a lgica de layout q o usurio enxerga. Negcios Onde est a regra de negcios. Dados a lgica de modelagem de dados, parte fsica de dados, tudo que envolve BD.

Pl/sql uma linguagem para trabalhar no SGBD. No SGBD no existe interao com o usurio. Ento no existem comandos de entrada e sada de dados em PL SQL. uma linguagem de blocos. So dois tipos de blocos: Annimo o um bloco sem nome, que quando digitado, executado e encerrado, no ficando mais disponvel para uma re-execuo. Nomeado o Funo o o Procedimento Gatilho

Blocos Annimos:
Declare

rea de Declarao
Begin (obrigatria)

rea de Cdigo
Exception

Tratamento de erros (exceo)


End (Obrigatria)

No SQL Window, criar a tabela mensagem:


Create Table Mensagem (MSG VARCHAR2(100))

Esta tabela ser a nossa rea de interao com o PL/SQL. Usaremos esta tabela para colocar a sada (o resultado) de nossas aes. Poder ser usada eventualmente tambm como rea de entrada de dados. Lembre-se que PL/SQL no possui interao com usurio, pois uma linguagem feita para a comunicao entre servidores. Por isso precisamos de uma tabela como esta para apontarmos a sada e vermos o que aconteceu.

Para executar, selecione o cdigo que quer que seja executado e, ou pressione <F8> ou clique no cone da engrenagem.
begin delete mensagem; insert into mensagem values ( alo mundo ); commit; end;

Para executar, selecione o cdigo que quer que seja executado e, ou pressione <F8> ou clique no cone da engrenagem. (No SQL Plus seria um / Enter)
Select * from mensagem

OBS: Dentro de um bloco pl/sql no pode existir cdigo ddl (create table, ...)

Declarando uma varivel:


Declare v_nr integer; (Regra de nomeao: Toda varivel deve comear com v_ ) begin delete mensagem v_nr := 100; insert into mensagem values ( nmero || TO_CHAR(V_NR)); commit; end; select * from mensagem

possvel declarar uma varivel j atribuindo um valor:


Declare v_nr integer := 30;

Tambm possvel converso implcita (sem o to_char)

Comentrios
-- Comentrio de uma linha /* Comentrio de vrias linhas */

Exerccio 1 no site possvel declarar uma varivel compatvel com uma coluna de uma tabela:
v_msg mensagem.msg%type; (onde mensagem o nome da tabela e msg a coluna desta tabela)

Pegar da aula 1 o exemplo 2 plsql no site. OBS: O select do PL/SQL tem que armazenar em uma varivel, pois no existe tela para exibio. Ex:
declare v_nome c_regiao.nome%type;

4
begin delete mensagem; select nome into v_nome (select coluna nome e grave em v_nome) from c_regiao where id = 5; insert into mensagem values (v_nome); commit; end; select * from mensagem

OBS: select into tem que retornar para a varivel apenas 1 valor. Nem zero nem vrios, s 1.

Abaixo exemplo trabalhando com 2 valores, 1 para cada varivel.


declare v_nome c_regiao.nome%type; v_id c_regiao.id%type; begin delete mensagem; select id, nome into v_id, v_nome from c_regiao where id = 5; insert into mensagem values (v_id || || v_nome); ( || significa concatenar) commit; end; select * from mensagem

Exemplo abaixo com 2 varveis, e select * :


declare v_nome c_ .nome%type; v_id c_regiao.id%type; begin delete mensagem; select * into v_id, v_nome from c_regiao where id = 5;

5
insert into mensagem values (v_id || || v_nome); commit; end; select * from mensagem

Ao invs de trabalhar com vrias variveis, possvel trabalhar com registros:

OBS: Todo registro deve ser nomeado comeando por r_ O exemplo abaixo cria um registro(r_reg) com a mesma quantidade e nome de colunas, e na mesma ordem de colunas que existem na tabela de referncia(c_regiao) , por causa do parmetro %rowtype, que faz isso.

declare r_reg c_regiao%rowtype; (<nome do registro> <nome da tabela referncia%rowtype>) v_id integer := 1; begin delete mensagem; select * into r_reg (vai ler o registro todo, com todas as suas colunas) from c_regiao where id = v_id;

insert into mensagem values (r_reg.id || || r_reg.nome); commit; end;

Trabalho no site (Aula 2 PLSQL)

Estruturas de seleo (if):


if <condio> then c1; c2; c3; else c1; c2; c3; end if;

OBS: Considerar que existem 3 tipos de condies: Verdadeiro, falso e nulo.

declare v_nr integer := 1; begin delete mensagem; if v_nr = 1 then insert into mensagem values ( numero igual a 1 ); elsif v_nr = 2 then insert into mensagem values ( numero igual a 2 ); else insert into mensagem values ( numero maior que 2 ); end if; commit; end; select * from mensagem;

OBS: possvel ter vrios elsif.

7 A primeira condio que der verdadeiro, o seu bloco ser executado e o restante no, mesmo que existam outras condies verdadeiras.

Estruturas de repetio:
declare: v_nr number(2) := 1; begin delete mensagem; while v_nr <= 10 loop insert into mensagem values (volta || v_nr); commit v_nr := v_nr + 1; end loop; insert into mensagem values (fora || v_nr); commit; end;

OUTRO EXEMPLO:

declare: v_nr number(2) := 1; begin delete mensagem; loop (Aqui comea um loop sem fim. Vai parar aps 99, pois a v_nr no aceita 3 dgitos) insert into mensagem values (volta || v_nr); commit v_nr := v_nr + 1; end loop; insert into mensagem values (fora || v_nr); commit; end;

8 OUTRO EXEMPLO:
declare: v_nr number(2) := 1; begin delete mensagem; loop insert into mensagem values (volta || v_nr); commit exit when v_nr = 10; (fim do loop quando v_nr = 10) v_nr := v_nr + 1; end loop; insert into mensagem values (fora || v_nr); commit; end;

OUTRO EXEMPLO (FOR):


declare: v_nr number(2) := 1; begin delete mensagem; for v_nr in 1..10 loop (Para contagem regressiva: for v_nr in reverse 1..10 loop > de 10 at 1) insert into mensagem values (volta || v_nr); commit end loop; end;

Diversos trabalhos de casa no site. Todos valem pontos!