반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- interrupt()
- 상관서브쿼리
- 스레드그룸
- MemoryStream
- interrupted()
- ObjectInputStream
- char[] String 형변환
- first-of-child
- Linux셋팅
- ThreadGroup()
- StringWriter
- 표현 언어
- Linux세팅
- include액션태그
- String char[] 형변환
- StringReader
- 아이디중복
- first-child
- include 지시자
- 상관 서브 쿼리
- 리눅스셋팅
- 리눅스세팅
- 메모리스트림
- Daemon()
- include지시자
- InputDialog
- ID중복
- isinterrupted()
- sleep()메소드
- 동기화
Archives
- Today
- Total
다연이네
[days17] 트리거(Trigger)의 :NEW, :OLD **추가 필요 본문
반응형
1. 성적테이블(학번, 이름, 국, 영, 수), 점수테이블(학번, 총점, 평균, 등수) 만들기
create table t_score
(
hak varchar2(10) primary key
,name varchar2(20)
,kor number(3)
,eng number(3)
,mat number(3)
);
create table t_grade
(
hak varchar2(10) primary key
,tot number(3)
,avg number(5,2)
,rank number(3)
,constraint tgrade_hak_fk foreign key(hak) references t_score(hak)
);
2. t_score(h,n,k,e,g) insert가 발생하면 자동으로 t_grade(총,평) insert해주는 트리거 생성
create or replace trigger tri_insert
after
insert on t_score
for each row --행 트리거 필수!!
declare
vtot number(3);
vavg number(5,2) ;
begin
vtot := :NEW.kor +:NEW.eng+ :NEW.mat;
vavg := vtot / 3;
insert into t_grade values (:NEW.hak, vtot, vavg, 1); --등수는 입력전 무조건 1
--commit (트리거는 auto commit이라 필요 없음)
--exception
end;
값 넣어보기
insert into t_score values('A001', '홍길동', 23,34,66 );
insert into t_score values('A002', '김지숙', 43,56, 96 );
select * from t_score;
select * from t_grade;
3. t_score이 update되면 해당 국영수 값이 DBMS에 출력되는 트리거 생성
create or replace trigger tri_update
after
update on t_score
for each row -- :NEW :OLD
declare
vtot number(3);
vavg number(5,2);
begin
vtot := :NEW.kor + :NEW.eng + :NEW.mat;
vavg := vtot / 3 ;
update t_grade
set tot = vtot , avg = vavg
where hak = :OLD.hak;
--dbms_output.put_line( :new.kor || ', ' || :new.eng || ', ' || :new.mat );
--dbms_output.put_line( :old.kor || ', ' || :old.eng || ', ' || :old.mat );
-- exception
end;
A002학생의 국어점수 43->89, 영어점수 56->77로 수정
update t_score
set kor = 89, eng = 77
where hak ='A002';
commit;
4. 등수 매기는 저장 프로시저 생성
create or replace procedure up_rank
is
begin
update t_Grade j
set rank = (select count(*)+1 from t_Grade i where i.tot>j.tot);
--where 이 없기에 모든 레코드 수정
--exception
end;
exec tri_rank;
select * from t_grade;
5. t_score 테이블에 학생 삭제되면 t_grade 테이블에 학생 삭제 + 등수 매기는 트리거 생성
create or replace trigger t_delete
after
delete on t_score
for each row
begin
delete from t_grade
where hak = :old.hak;
tri_rank; --pl/sql 내에서 또 다른 저장 프로시저 호출 가능
--이거 호출하면 수정이되든 삭제되든 매번 랭크 새로 매김
--exception
end;
반응형
'Oracle' 카테고리의 다른 글
[days17] PL/SQL의 패키지(Package) (0) | 2020.11.23 |
---|---|
[days17] 트리거(Trigger) 예제 (0) | 2020.11.23 |
[days16] Trigger (트리거) (0) | 2020.11.20 |
[days16] PL/SQL 블록 내에서 에러처리 (0) | 2020.11.19 |
[days15] Stored Function (저장함수) (0) | 2020.11.18 |
Comments