SlideShare uma empresa Scribd logo
1
Aula Prática PL/SQL
Curso de Sistemas de Informação
Disciplina de Banco de Dados – IF976
Profa. Bernadette Farias Lóscio
bfl@cin.ufpe.br
Slides preparados por
Danusa Ribeiro Cunha
(drbc@cin.ufpe.br)
Estudo de caso
• Arquivos para criação e povoamento do BD:
– BDUniversidadeCompleto_criacaoTabelas.sql
– BDUniversidadeCompleto_povoamento.sql
3
Estudo de Caso - Modelo Lógico
PL/SQL
Procedural Language / Structured Query Language
PROCEDURE
• Por padrão não retornam valor (exceção:
modo OUT ou IN OUT).
• Estrutura básica de um PROCEDURE
PROCEDURE nome IS
BEGIN
[EXCEPTION]
END;
FUNCTION
• Por padrão, necessariamente, retornam um
único valor.
• Estrutura básica de uma FUNCTION
FUNCTION nome RETURN tipo IS
BEGIN
RETURN valor
[EXCEPTION]
END;
Exercício 1
• Admita que cada uma das cadeiras que um
aluno paga vale 5 créditos, que cada projeto
vale 1 e que cada monitoria vale 2 créditos.
Implemente uma função que, dado um
número de matrícula, retorna os créditos
totais da carreira estudantil do aluno.
CREATE OR REPLACE FUNCTION qtd_creditos
(mat aluno.matricula_aluno%TYPE)
RETURN NUMBER IS
retorno NUMBER;
BEGIN
SELECT COUNT(a_t.matricula_aluno)*5
+ COUNT(a_t.codigo_projeto)*1
+ COUNT(m.matricula_aluno)*2 INTO
retorno
FROM aluno_turma a_t, monitoria m, aluno a
WHERE a.matricula_aluno =
a_t.matricula_aluno
AND m.matricula_aluno =
a.matricula_aluno
AND a.matricula_aluno = mat;
RETURN retorno;
END;
/
Exercício 2
• Implemente um procedimento que recebe
como parâmetro de entrada um título de um
projeto e imprime os seus dados.
CREATE OR REPLACE PROCEDURE pesquisa_projeto
(par_titulo IN projeto.titulo%TYPE) IS
v_codigo_projeto projeto.codigo_projeto%TYPE;
v_titulo projeto.titulo%TYPE;
v_conceito projeto.conceito%TYPE;
v_hp projeto.hp%TYPE;
BEGIN
SELECT codigo_projeto, titulo, conceito, hp
INTO v_codigo_projeto,v_titulo,v_conceito,v_hp
FROM projeto
WHERE titulo LIKE par_titulo;
dbms_output.put_line(
'COD: ' || v_codigo_projeto||
' - TIT: ' || v_titulo ||
' - CON: ' || v_conceito ||
' - HP: ' || v_hp);
END;
/
--TESTANDO
EXECUTE pesquisa_projeto('Rede Aberta');
Exercício 3
• Implemente um novo procedimento,
semelhante ao anterior, que seja mais
genérico e pesquise todos os projetos que
possuam o valor do parâmetro como substring
do seu título. (Utilize LIKE '%' e CURSOR)
CREATE OR REPLACE PROCEDURE pesquisa_projeto_generico
(par_titulo IN projeto.titulo%TYPE) IS
CURSOR cursor_projetos IS
SELECT *
FROM projeto
WHERE LOWER(titulo)
LIKE LOWER('%'||par_titulo||'%');
registro_projeto projeto%ROWTYPE;
BEGIN
OPEN cursor_projetos;
LOOP
FETCH cursor_projetos INTO registro_projeto;
EXIT WHEN cursor_projetos%NOTFOUND;
dbms_output.put_line(
'COD: '||registro_projeto.codigo_projeto||
' - TIT: ' || registro_projeto.titulo||
' - CON: ' || registro_projeto.conceito||
' - HP: ' || registro_projeto.hp);
END LOOP;
CLOSE cursor_projetos;
END;
/
--TESTANDO
EXECUTE pesquisa_projeto_generico('cin');
Exercício 4
• Crie um PROCEDURE que recebe um VARCHAR do
tipo ano_semestre e produz dois parâmetros
numéricos de saída: ano e semestre;
CREATE OR REPLACE PROCEDURE des_semestre
(p_ano_semestre IN turma.ano_semestre%TYPE) IS
ano number;
semestre number;
BEGIN
ano := to_char(substr(p_ano_semestre,1,4));
semestre := to_char(substr(p_ano_semestre,6,1));
dbms_output.put_line('Ano' || ano || 'Semestre' ||
semestre);
END;
/
NA PRÓXIMA AULA...
Trigger’s e Procedures e Function mais difíceis..

Mais conteúdo relacionado

PPTX
Fundamentos da Programação PHP OO - Aula 1
PPTX
Desenvolvimento Web com PHP - Aula 3
KEY
Python 07
PDF
PDF
Desenvolvimento ágil com Kohana framework
PPTX
Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos
PDF
Desenvolvimento para a Web com CakePHP
PPTX
Workshop Django Framework - 30/10/2018
Fundamentos da Programação PHP OO - Aula 1
Desenvolvimento Web com PHP - Aula 3
Python 07
Desenvolvimento ágil com Kohana framework
Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos
Desenvolvimento para a Web com CakePHP
Workshop Django Framework - 30/10/2018

Semelhante a asdfasdfasdfasdssdfsdfsdfsdfsdfsdfsdfsdfsdf (20)

PDF
Como desenvolver uma aplicação Web com django 2.2.13 (Parte 2 de 2)
PDF
Um framework para validação automática de modelos aplicado ao subsistema de e...
PPTX
Javascript para CSharpers 4 - POO
PPT
Aula1
PPT
Cakephp - framework de desenvolvimento de aplicações Web em PHP
PDF
Aplicacoes Rapidas Para Web Com Django
PPTX
Desenvolvimento Web com PHP - Aula 1
PPT
Desenvolvimento Agil Com Doctrine Orm
PDF
Teste de Integração - Unidade III
PPT
Planode Aula
PPTX
Programando php com excelência
ODP
Introdução ao framework CodeIgniter
PDF
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
PDF
Tutorial visão automação de testes e casper js
PPTX
Tutorial - Visão sobre Automação de Testes com CasperJS
PDF
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
PDF
Refatoração - aquela caprichada no código
PPTX
Express2012simples 130312140529-phpapp01
PPTX
Backbone.js nas trincheiras
PDF
Seu framework é melhor pra quê?
Como desenvolver uma aplicação Web com django 2.2.13 (Parte 2 de 2)
Um framework para validação automática de modelos aplicado ao subsistema de e...
Javascript para CSharpers 4 - POO
Aula1
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Aplicacoes Rapidas Para Web Com Django
Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Agil Com Doctrine Orm
Teste de Integração - Unidade III
Planode Aula
Programando php com excelência
Introdução ao framework CodeIgniter
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Tutorial visão automação de testes e casper js
Tutorial - Visão sobre Automação de Testes com CasperJS
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
Refatoração - aquela caprichada no código
Express2012simples 130312140529-phpapp01
Backbone.js nas trincheiras
Seu framework é melhor pra quê?
Anúncio

asdfasdfasdfasdssdfsdfsdfsdfsdfsdfsdfsdfsdf

  • 1. 1 Aula Prática PL/SQL Curso de Sistemas de Informação Disciplina de Banco de Dados – IF976 Profa. Bernadette Farias Lóscio bfl@cin.ufpe.br Slides preparados por Danusa Ribeiro Cunha (drbc@cin.ufpe.br)
  • 2. Estudo de caso • Arquivos para criação e povoamento do BD: – BDUniversidadeCompleto_criacaoTabelas.sql – BDUniversidadeCompleto_povoamento.sql
  • 3. 3 Estudo de Caso - Modelo Lógico
  • 4. PL/SQL Procedural Language / Structured Query Language
  • 5. PROCEDURE • Por padrão não retornam valor (exceção: modo OUT ou IN OUT). • Estrutura básica de um PROCEDURE PROCEDURE nome IS BEGIN [EXCEPTION] END;
  • 6. FUNCTION • Por padrão, necessariamente, retornam um único valor. • Estrutura básica de uma FUNCTION FUNCTION nome RETURN tipo IS BEGIN RETURN valor [EXCEPTION] END;
  • 7. Exercício 1 • Admita que cada uma das cadeiras que um aluno paga vale 5 créditos, que cada projeto vale 1 e que cada monitoria vale 2 créditos. Implemente uma função que, dado um número de matrícula, retorna os créditos totais da carreira estudantil do aluno.
  • 8. CREATE OR REPLACE FUNCTION qtd_creditos (mat aluno.matricula_aluno%TYPE) RETURN NUMBER IS retorno NUMBER; BEGIN SELECT COUNT(a_t.matricula_aluno)*5 + COUNT(a_t.codigo_projeto)*1 + COUNT(m.matricula_aluno)*2 INTO retorno FROM aluno_turma a_t, monitoria m, aluno a WHERE a.matricula_aluno = a_t.matricula_aluno AND m.matricula_aluno = a.matricula_aluno AND a.matricula_aluno = mat; RETURN retorno; END; /
  • 9. Exercício 2 • Implemente um procedimento que recebe como parâmetro de entrada um título de um projeto e imprime os seus dados.
  • 10. CREATE OR REPLACE PROCEDURE pesquisa_projeto (par_titulo IN projeto.titulo%TYPE) IS v_codigo_projeto projeto.codigo_projeto%TYPE; v_titulo projeto.titulo%TYPE; v_conceito projeto.conceito%TYPE; v_hp projeto.hp%TYPE; BEGIN SELECT codigo_projeto, titulo, conceito, hp INTO v_codigo_projeto,v_titulo,v_conceito,v_hp FROM projeto WHERE titulo LIKE par_titulo; dbms_output.put_line( 'COD: ' || v_codigo_projeto|| ' - TIT: ' || v_titulo || ' - CON: ' || v_conceito || ' - HP: ' || v_hp); END; / --TESTANDO EXECUTE pesquisa_projeto('Rede Aberta');
  • 11. Exercício 3 • Implemente um novo procedimento, semelhante ao anterior, que seja mais genérico e pesquise todos os projetos que possuam o valor do parâmetro como substring do seu título. (Utilize LIKE '%' e CURSOR)
  • 12. CREATE OR REPLACE PROCEDURE pesquisa_projeto_generico (par_titulo IN projeto.titulo%TYPE) IS CURSOR cursor_projetos IS SELECT * FROM projeto WHERE LOWER(titulo) LIKE LOWER('%'||par_titulo||'%'); registro_projeto projeto%ROWTYPE; BEGIN OPEN cursor_projetos; LOOP FETCH cursor_projetos INTO registro_projeto; EXIT WHEN cursor_projetos%NOTFOUND; dbms_output.put_line( 'COD: '||registro_projeto.codigo_projeto|| ' - TIT: ' || registro_projeto.titulo|| ' - CON: ' || registro_projeto.conceito|| ' - HP: ' || registro_projeto.hp); END LOOP; CLOSE cursor_projetos; END; / --TESTANDO EXECUTE pesquisa_projeto_generico('cin');
  • 13. Exercício 4 • Crie um PROCEDURE que recebe um VARCHAR do tipo ano_semestre e produz dois parâmetros numéricos de saída: ano e semestre; CREATE OR REPLACE PROCEDURE des_semestre (p_ano_semestre IN turma.ano_semestre%TYPE) IS ano number; semestre number; BEGIN ano := to_char(substr(p_ano_semestre,1,4)); semestre := to_char(substr(p_ano_semestre,6,1)); dbms_output.put_line('Ano' || ano || 'Semestre' || semestre); END; /
  • 14. NA PRÓXIMA AULA... Trigger’s e Procedures e Function mais difíceis..