일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- tomcat
- 과정평가형
- JSP
- HTML
- ||
- git
- JavaScript
- CRUD
- sql developer
- 성적프로그램
- Bootstrap
- oracle
- group by
- Java
- alias
- rownum
- HTTP Status 404
- jQuery
- 답변형 게시판
- 한글 인코딩
- 모조칼럼
- github
- Oracle SQL
- 이클립스
- distinct
- 부트스트랩
- HTTP Status 500
- Oracle DB
- 제약조건
- SQL
초급의 끄적거림
[SQL] Function, Trigger (펑션, 트리거) 본문
[Function]
⊙ 값을 계산하고 결과값을 반환하기 위해서 사용
⊙ 저장프로시저와의 차이점
→ 입력 매개변수만 사용할 수 있고 리턴 타입 (Retrun문) 을 반드시 지정해야 함 (필수)
⊙ 형식)
create or replace function 함수 이름
매개변수
return 리턴 자료형
is
변수선언
begin
문장
end;
/
문제1) sungjuk테이블에서 국어점수의 평균을 구하시오
select avg(kor) from sungjuk; --68.33333333333333333333333333 --행추가 insert into sungjuk(sno, uname, kor, eng, mat, addr) values (sungjuk_seq.nextval, '이순신', 40, 60, 75, 'Busan'); --행추가 후, 66.153846153846 select * from sungjuk; --행수정 update sungjuk set kor=95 where sno=23; --평균 : 69.6153861538 --행 삭제 delete from sungjuk where sno=23; --평균 : 67.5 |
sno=24의 국어점수 (40점)를 50점 추가하는 함수 생성 → sqlplus에서 제대로 인상된 국어점수가 들어가 있는 지 확인 할 것 |
create or replace function fn_update_kor (v_sno number) return number is v_kor number; begin update sungjuk set kor=kor+50 where sno=v_sno; select kor into v_kor from sungjuk where sno=v_sno; return v_kor; --인상된 국어점수 90점 end; / |
⊙ sqlplus에서 확인
- Function fn_update_kor 를 컴파일 한 후 cmd를 이용해서 국어점수가 +50 이 된 것을 확인
<sqlplus에서 적용된 명령문>
SQL> var korea number;
SQL> execute :korea := fn_update_kor(24); --sno가 24인 것에 실행
PL/SQL procedure successfully completed.
SQL> print korea;
[Trigger]
⊙ 방아쇠, 데이터베이스에서의 연쇄적인 동작을 정의함
⊙ insert, update, delete문이 실행될 때 묵시적으로 수행되는 프로시저
⊙ 테이블과는 별도로 데이터베이스에 저장된다
⊙ 형식)
create or replace trigger 트리거이름
before 또는 after
트리거이벤트 on 테이블명 --트리거이벤트(insert, update, delete)를 수행하고
declare
변수선언; -- 연쇄동작할 것을 넣어주기
begin
실행할 명령어;
end;
/
<Trigger 컴파일링> |
create or replace trigger kor_trigger after insert or update or delete on sungjuk declare avg_kor number; begin select avg(kor) into avg_kor from sungjuk; dbms_output.put_line('국어평균 : ' || avg_kor); end; |
<콘솔창 출력> dbms_output.put_line를 출력하기 위해서 사용함 |
set serveroutput on; |
→ Trigger 컴파일링을 하고 행 추가, 행 수정, 행 삭제를 수행하면 결과값도 같이 보여짐
문제1) sungjuk테이블에서 국어점수의 평균을 구하시오
- 행 추가 |
insert into sungjuk(sno, uname, kor, eng, mat, addr) values (sungjuk_seq.nextval, '이순신', 40, 60, 75, 'Busan'); |
- 행 수정 |
update sungjuk set kor=80 where sno=25; |
- 행 삭제 |
delete from sungjuk where sno=25; |
'DB > Oracle' 카테고리의 다른 글
[SQL/ERD] SQL Developer를 이용한 ERD 만들기 (0) | 2019.08.21 |
---|---|
[SQL] 백업 및 복원 (0) | 2019.08.07 |
[SQL] PL/SQL 프로시저 (형식/조건문/반복문), %rowtype, %type (0) | 2019.08.05 |
[SQL] Oracle XE 11g 설치, cmd에서 사용자 계정 생성/권한부여 (0) | 2019.08.01 |
[SQL] CSV 변환 (외부 데이터를 이용하여 테이블 생성) (0) | 2019.07.31 |