Fórum Criar um Bloco no PL/SQL para preencher resultados? #501044
12/11/2014
0
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
Curtir tópico
+ 0Post mais votado
12/11/2014
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;
Lourival Queiroz
Gostei + 1
Mais Posts
13/11/2014
Itamar Souza
Gostei + 0
13/11/2014
Itamar Souza
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
14/11/2014
Lourival Queiroz
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
Clique aqui para fazer login e interagir na Comunidade :)