Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

joaoxxx

Gravar média em PL/SQL

Recommended Posts

Preciso fazer em PL/SQL atualizar a media ou seja pega as notas e joga na media mais estou meio perdido como fazer com trigger alguem pode me dar uma luz? Pode ser com outro exemplo de trigger que faça algo similar apenas para mim ter uma noção!

 

Obrigado

 


CREATE TABLE ALUNO(
RA NUMBER(10),
N1 NUMBER(4),
N2 NUMBER(4),
N3 NUMBER(4),
MEDIA NUMBER(3,1));

INSERT INTO ALUNO (RA,N1,N2,N3) VALUES (8569542658,10,10,10);
INSERT INTO ALUNO (RA,N1,N2,N3) VALUES (9569527658,5,2,10);
INSERT INTO ALUNO (RA,N1,N2,N3) VALUES (5565853295,6,2,10);

CREATE OR REPLACE FUNCTION T_R(
P_RA NUMBER)
RETURN VARCHAR2 IS
V_RESULTADO VARCHAR2(10);V_N1 NUMBER;V_N2 NUMBER;V_N3 NUMBER;V_MEDIA NUMBER;
BEGIN
SELECT N1,N2,N3 INTO V_N1,V_N2,V_N3 FROM ALUNO WHERE RA=P_RA;
V_MEDIA:=(V_N1+V_N2+V_N3)/3;
IF V_MEDIA=6.0 THEN
V_RESULTADO:='APROVADO';
ELSE
V_RESULTADO:='REPROVADO';
END IF;
RETURN V_RESULTADO;
END T_R;
/



CREATE OR REPLACE TRIGGER ATUMEDIA
BEFORE UPDATE
OF MEDIA
ON ALUNO
FOR EACH ROW
BEGIN
INSERT INTO ALUNO
SET 

VALUES(:NEW.V_MEDIA,USER,SYSDATE);
END ATUMEDIA;
/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Atribuir direto a coluna via trigger.

 

CREATE OR REPLACE TRIGGER ATUMEDIA
BEFORE UPDATE
OF MEDIA
ON ALUNO
FOR EACH ROW
BEGIN
:NEW.V_MEDIA := FUNCTION T_R(:NEW.RA);
/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia JoãoXX,

 

Veja se o exemplo abaixo te ajuda.

 

-- TABELA

CREATE TABLE ALUNO

(

RA NUMBER(10),

N1 NUMBER(4),

N2 NUMBER(4),

N3 NUMBER(4),

MEDIA NUMBER(3,1)

);

 

------------------------------------------------

-- TRIGGER

create or replace trigger TRG_MEDIA_ALUNO

before insert or update on ALUNO

for each row

declare

 

v_total number(5);

v_media ALUNO.MEDIA%type;

 

begin

v_total := :NEW.N1 + :NEW.N2 + :NEW.N3;

v_media := V_TOTAL / 3;

 

:NEW.MEDIA := v_media;

end;

 

------------------------------------------------

--INSERT

INSERT INTO ALUNO (RA,N1,N2,N3) VALUES (8569542658,10,10,10);

INSERT INTO ALUNO (RA,N1,N2,N3) VALUES (9569527658,5,2,10);

INSERT INTO ALUNO (RA,N1,N2,N3) VALUES (5565853295,6,2,10);

 

------------------------------------------------

-- VALIDA RESULTADO

SELECT * FROM ALUNO

 

Adriano

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.