Professional Documents
Culture Documents
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)
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
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, ...)
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.
5
insert into mensagem values (v_id || || v_nome); commit; end; select * from mensagem
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;
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;
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;