Criar um Bloco no PL/SQL para preencher resultados?
Amigos, tenha a seguinte tabela é preciso criar uma estrutura, estou estudando Oracle, estou postando aqui para facilitar é só roda o sql
CREATE TABLE ALUNO (RA NUMBER(9),
DISCIPLINA VARCHAR2(30),
MEDIA NUMBER(3,1),
CARGA_HORA NUMBER(2),
FALTAS NUMBER(2),
RESULTADO VARCHAR2(10));
INSERT INTO ALUNO VALUES (1,''SQL'',7.5,80,20,'''');
INSERT INTO ALUNO VALUES (2,''PLSQL?,5.5,80,20,'''');
INSERT INTO ALUNO VALUES (3,?MBD'',7.5,80,40,'''');
1 Se o aluno obteve média igual ou maior ou igual a 7.0 e suas faltas não ultrapassarem 25% da carga horária da disciplina o resultado será: APROVADO.
2 Se o aluno obteve média inferior a 7.0 e suas faltas não ultrapassarem 25% da carga horária da disciplina o resultado será: EXAME.
3 Para demais casos o resultado será: REPROVADO.
CREATE TABLE ALUNO (RA NUMBER(9),
DISCIPLINA VARCHAR2(30),
MEDIA NUMBER(3,1),
CARGA_HORA NUMBER(2),
FALTAS NUMBER(2),
RESULTADO VARCHAR2(10));
INSERT INTO ALUNO VALUES (1,''SQL'',7.5,80,20,'''');
INSERT INTO ALUNO VALUES (2,''PLSQL?,5.5,80,20,'''');
INSERT INTO ALUNO VALUES (3,?MBD'',7.5,80,40,'''');
1 Se o aluno obteve média igual ou maior ou igual a 7.0 e suas faltas não ultrapassarem 25% da carga horária da disciplina o resultado será: APROVADO.
2 Se o aluno obteve média inferior a 7.0 e suas faltas não ultrapassarem 25% da carga horária da disciplina o resultado será: EXAME.
3 Para demais casos o resultado será: REPROVADO.
Itamar Souza
Curtidas 0
Melhor post
Lourival Queiroz
12/11/2014
Olha só modifiquei o teu insert:
o select ficou o seguinte:
INSERT INTO ALUNO VALUES (1,'SQL',7.5,80,20,null); INSERT INTO ALUNO VALUES (2,'PLSQL',5.5,80,20,null); INSERT INTO ALUNO VALUES (3,'MBD',7.5,80,40,null); COMMIT;
o select ficou o seguinte:
select ra,
Disciplina,
Media,
Carga_Hora,
Faltas,
case when (Media >= 7) and (trunc((Faltas / Carga_Hora * 100)) <= 25) then 'APROVADO'
when (Media between 5 and 6.9) and (trunc((Faltas / Carga_Hora * 100)) <= 25) then 'EXAME'
else 'REPROVADO' end Resultado
from aluno
order by ra;
GOSTEI 1
Mais Respostas
Itamar Souza
12/11/2014
Lourival, agradeço muito a sua ajuda, você não tem ideia de quanto me ajudou!!
GOSTEI 0
Itamar Souza
12/11/2014
Eu preciso preencher o campo resultado, como ficaria o bloco?
neste caso precisa criar um bloco?
UPDATE ALUNO SET RESULTADO = (
CASE
WHEN MEDIA >= 7.0 AND FALTAS < 25 THEN 'APROVADO'
WHEN FALTAS < 25 THEN 'EXAME'
ELSE 'REPROVADO'
END
);
neste caso precisa criar um bloco?
UPDATE ALUNO SET RESULTADO = (
CASE
WHEN MEDIA >= 7.0 AND FALTAS < 25 THEN 'APROVADO'
WHEN FALTAS < 25 THEN 'EXAME'
ELSE 'REPROVADO'
END
);
GOSTEI 0
Lourival Queiroz
12/11/2014
Vou mostrar duas formas de fazer update, obvio que vc pode fazer de várias maneiras:
1 - Forma atraves do código (ra)
2 - Forma através do rowid
Não te aconselho a fazer um update em uma tabela utilizando um "select" com a mesma, se fosse outra tabela talvez valha a pena, mas tem de ser analisado e aconselho sempre utilizar o "explain plan" em qualquer "select" para verificar sua eficácia.
1 - Forma atraves do código (ra)
begin
for r in (select ra,
case when (Media >= 7) and (trunc((Faltas / Carga_Hora * 100)) <= 25) then 'APROVADO'
when (Media between 5 and 6.9) and (trunc((Faltas / Carga_Hora * 100)) <= 25) then 'EXAME'
else 'REPROVADO' end Resultado
from aluno
order by ra)
loop
update aluno
set Resultado = r.Resultado
where ra = r.ra;
end loop;
commit;
end;
/
2 - Forma através do rowid
begin
for r in (select rowid rwid,
case when (Media >= 7) and (trunc((Faltas / Carga_Hora * 100)) <= 25) then 'APROVADO'
when (Media between 5 and 6.9) and (trunc((Faltas / Carga_Hora * 100)) <= 25) then 'EXAME'
else 'REPROVADO' end Resultado
from aluno
order by ra)
loop
update aluno
set Resultado = r.Resultado
where rowid = r.rwid;
end loop;
commit;
end;
/
Não te aconselho a fazer um update em uma tabela utilizando um "select" com a mesma, se fosse outra tabela talvez valha a pena, mas tem de ser analisado e aconselho sempre utilizar o "explain plan" em qualquer "select" para verificar sua eficácia.
GOSTEI 1