Vous êtes sur la page 1sur 22

Administrao de Banco de Dados

Parte II
Fundao Educacional de Andradina Faculdades Integradas Stella Maris de Andradina Tecnologia em Anlise e Desenvolvimento de Sistemas Prof MSc. Daniela Sbizera Justo

PL/SQL

PL/SQL


PL/SQL combina flexibilidade da SQL com construes procedimentais de uma 3GL




estende SQL:
   

variveis e tipos estruturas de controle procedimentos e funes tipos de objeto e mtodos

PL/SQL


PL/SQL engine tecnologia


 

compila e executa blocos PL/SQL pode ser instalado em:




servidor Oracle
 

stored procedures e triggers blocos annimos. Ex:  Ferramentas de desenvolvimento PL/SQL: SQLPlus, Rapid SQL, DBPartner, SQL Navigator, TOAD, SQL-Programmer, PL/SQL Developer, ...  Pr-compiladores (ex: Pro*C), ODBC, JDBC, OCI ... Oracle Forms Oracle Reports

ferramentas Oracle
 

PL/SQL Engine

Figura retirada de PL/SQL User s Guide and Reference (Release 2 (9.2))

PL/SQL


Vantagens
      

suporte a SQL suporta a programao OO performance produtividade portabilidade integrao com Oracle segurana

PL/SQL


Recursos
   

estrutura em blocos variveis e tipos tratamento de erros estruturas de controle


 

condicionais repetio

    

cursores procedimentos e funes pacotes colees conceitos OO

Princpios bsicos PL/SQL




PL/SQL no tem comandos de entrada e sada


 

Pacote UTL_FILE ler/escrever arquivo Pacote DBMS_OUTPUT sada em tela

/*habilita sada*/ set serveroutput on; begin dbms_output.put_line('Hello World!'); end;

Princpios bsicos PL/SQL




Estrutura em blocos

DECLARE
/*variveis, tipos, cursores, subprogramas, ... */

BEGIN
/* instrues... */

EXCEPTION
/*tratamento de excees*/

END;

Princpios bsicos PL/SQL




Exemplo

DECLARE v_count NUMBER; BEGIN SELECT count(*) INTO v_count FROM aluno; dbms_output.put_line('Vcount = ' || v_count); END;

Princpios bsicos PL/SQL




Exemplo

DECLARE v_nome aluno.nome%TYPE; v_idade aluno.idade%TYPE; BEGIN SELECT nome, idade INTO v_nome, v_idade FROM aluno A WHERE A.nusp = 555; dbms_output.put_line('Aluno '|| v_nome || ', idade ' || v_idade); EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('Aluno no encontrado'); END;

Princpios bsicos PL/SQL




Estruturas condicionais
IF ... THEN .... END IF;  IF ... THEN .... ELSE ... END IF;  IF ... THEN .... ELSIF ... THEN... ELSE ... END IF;  CASE <varivel> WHEN <valor> THEN <instrues> WHEN ... THEN... .... ELSE ... /*opcional*/ END CASE;


Princpios bsicos PL/SQL




Exemplo

DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count FROM matricula M WHERE M.sigla = 'SCE179' and M.ano = EXTRACT (YEAR FROM SYSDATE); IF v_count < 70 THEN insert into matricula values ('SCE179', 2, 222, EXTRACT (YEAR FROM SYSDATE), NULL); ELSE dbms_output.put_line('Turma lotada'); END IF; END;

Exemplo
DECLARE v_count NUMBER; e_lotada EXCEPTION; BEGIN SELECT COUNT(*) into v_count FROM matricula M WHERE M.sigla = 'SCE179' and M.ano = EXTRACT (YEAR FROM SYSDATE); IF v_count < 70 THEN insert into matricula values ('SCE179', 2, 444, EXTRACT (YEAR FROM SYSDATE), NULL); ELSE RAISE e_lotada; END IF; EXCEPTION WHEN e_lotada THEN dbms_output.put_line('Turma lotada'); WHEN OTHERS THEN dbms_output.put_line('Erro nro: ' || SQLCODE || '. Mensagem: ' || SQLERRM ); END;

Princpios bsicos PL/SQL




Estruturas de Repetio
LOOP <instrues> EXIT WHEN <condio de parada> END LOOP;  WHILE <condio> LOOP <instrues> END LOOP;  FOR <contador> IN [REVERSE] <min>..<max> LOOP <instrues> END LOOP;


Exemplo
DECLARE v_disciplina Turma.Sigla%TYPE; v_nroAlunos Turma.NAlunos%TYPE; BEGIN v_disciplina := 'SCE103'; v_nroAlunos := 0; /* insere 6 turmas na disciplina SCE103 */ FOR nroTurma IN 1..6 LOOP INSERT INTO Turma VALUES (v_disciplina, nroTurma, v_nroAlunos); END LOOP; EXCEPTION WHEN OTHERS THEN dbms_output.put_line('Erro nro: ' || SQLCODE || '. Mensagem: ' || SQLERRM ); END;

Cursores


rea de contexto


rea de memria com informaes de processamento de uma instruo inclui conjunto ativo linhas retornadas por uma consulta handle para uma rea de contexto no uma varivel de memria tipos:
 

Cursor


implcito explcito

Cursor Explcito


Passos:
   

declarar o cursor abrir o cursor buscar resultados fechar cursor

Exemplo
DECLARE v_alunos Aluno%ROWTYPE; CURSOR c_alunos IS SELECT * FROM Aluno; BEGIN OPEN c_alunos;
/*abre cursor - executa consulta */

LOOP FETCH c_alunos INTO v_alunos; /*recupera informao*/ EXIT WHEN c_alunos%NOTFOUND; dbms_output.put_line('Aluno: ' || v_alunos.nome || ' NUSP: ' || v_alunos.nusp); END LOOP; CLOSE c_alunos; END;
/*fecha cursor*/

Exemplo
DECLARE v_aluno Matricula.aluno%TYPE; v_nota Matricula.nota%TYPE; CURSOR c_alunos IS SELECT aluno, nota FROM Matricula WHERE sigla='SCE518' AND ano=2006 FOR UPDATE; BEGIN OPEN c_alunos; LOOP FETCH c_alunos INTO v_aluno, v_nota; EXIT WHEN c_alunos%NOTFOUND; dbms_output.put_line('Aluno: ' || v_aluno || ' Nota: ' || v_nota); END LOOP; CLOSE c_alunos; END;

Exemplo
DECLARE v_aluno Aluno.NUSP%TYPE; CURSOR c_alunos IS SELECT DISTINCT A.NUSP FROM Aluno A WHERE NOT EXISTS (SELECT M.aluno FROM Matricula M WHERE A.NUSP = M.aluno AND M.ano > 2001); BEGIN OPEN c_alunos; LOOP FETCH c_alunos INTO v_aluno; EXIT WHEN c_alunos%NOTFOUND; DELETE FROM Aluno WHERE NUSP = v_aluno; COMMIT; END LOOP; CLOSE c_alunos; END;

Cursor Explcito


Atributos
   

FOUND NOTFOUND ISOPEN ROWCOUNT

PL/SQL


Manual de consulta:

PL/SQL Users Guide and Reference

Vous aimerez peut-être aussi