Bloco atualizar o campo com base em critérios?

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
itasouza
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Ter, 30 Out 2007 12:43 pm
Localização: SP

Amigos, tenha a seguinte tabela é preciso criar uma estrutura, Bloco, para reencher o campo Resultado, estou postando aqui para facilitar é só roda o sql

Selecionar tudo

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,null);
INSERT INTO ALUNO VALUES (2,'PLSQL',5.5,80,20,null);
INSERT INTO ALUNO VALUES (3,'MBD',7.5,80,40,null);
COMMIT;

Selecionar tudo

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;
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Você quer rodar um UPDATE pra preencher esse campo com a regra do select ?
itasouza
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Ter, 30 Out 2007 12:43 pm
Localização: SP

dr_gori escreveu:Você quer rodar um UPDATE pra preencher esse campo com a regra do select ?
Quero criar um Bloco para preencher o campo resultado, estou em dúvida de como fazer isso.
Seria algo parecido com isso, mais teria que ser um bloco, tipo um procedimento no oracle, eu estou estudando, só conheço o sql server :

Selecionar tudo

UPDATE ALUNO SET RESULTADO = (
    CASE
      WHEN MEDIA >= 7.0 AND FALTAS < 25 THEN 'APROVADO'
      WHEN FALTAS < 25 THEN 'EXAME'
      ELSE 'REPROVADO'
    END
  );
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 317
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Amigo, se bem entendi a solução independe do banco de dados, por isso, se quiser fazer a coisa da forma correta como sugeri o "manual de boas práticas", veja o que diz a terceira regra normal de banco de dados:

"Uma tabela está na Terceira Forma Normal 3FN se ela estiver na 2FN e se nenhuma coluna não-chave depender de outra coluna não-chave. Na terceira forma normal temos de eliminar aqueles campos que podem ser obtidos pela equação de outros campos da mesma tabela."

Estou colocando essa citação, porque caso não a conheça pode trazer luz a sua questão.

Entendendo essa estrutra da modelagem de dados, a solução depende da sua necessidade. Como podemos perceber, trata-se do resultado de aprovação ou não de um aluno dependendo da media e numero de faltas. Portanto defina o período, se é bimestral, trimestral, semestral ou anual.

Com a tabela populada, imagine uma grande quantidade de registros. Logo, você poderia utilizar um cursor com uma laço para percorrer o dataset, efetuando o calculo no SELECT, da mesma forma como você postou acima, atualizando a coluna da tabela, pelas chaves, com o valor do resultado. Ainda se quiser, pode criar uma FUNCTION com a mesma estrutura do cursor e "schedular" para executar nos períodos necessários.

Espero ter ajudado.
Responder
  • Informação