Criar um Bloco no PL/SQL para preencher resultados?

Oracle

12/11/2014

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.
Itamar Souza

Itamar Souza

Curtidas 0

Melhor post

Lourival Queiroz

Lourival Queiroz

12/11/2014

Olha só modifiquei o teu insert:

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

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

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
);
GOSTEI 0
Lourival Queiroz

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)

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
POSTAR