본문 바로가기

ComputerScience/Database

DB - 23. Functions and Procedures , Trigger

728x90

1. Declare SQL Functions

- 집계함수를 배웠었다.

- 언어 자체가 제공하는 built in function이다.

- 이 처럼 사용자가 직접 원하는 logic을 구현해서 사용할 수 있다.

- 아래 예시는 학과 이름을 주면 해당 학과의 instructor 수를 반환하는 함수를 정의한다.

- query문을 통해 반환된 값을 d_count에 저장하여 반환한다.

- 이렇게 함수를 정의하여 나중에 사용자가 사용할 수 있다.

- 원래 같으면 department와 instructor 테이블을 둘다 봐야 알수 있지만 이미 dept_count가 instructor에서 값을 가져오기 때문에 아래 구문에서 instructor테이블까지 명시할 필요가 없어졌다.

2. Table Functions

- 함수의 반환값이 integer등의 값이 아니라 table인 경우를 말한다.

- 아래 예시는 과 이름을 입력으로 받아 해당 과의 교수이름들을 반환한다.

- usage를 보면 instructor_of('Music')의 반환값이 table이라고 명시해주고 있다.

3. Procedures

- 앞서 살펴본 함수 예시를 procedure로 변환해보자.

- input parameter를 받아서 계산한 결과를 output parameter에 저장한다.

- procedure를 호출할때는 함수와 달리 call을 사용한다.

- 변수를 선언하고 procedure의 결과를 그 변수에 저장한다.

 

*사용자가 정의한 함수나 프로시저는 db에 저장되어 호출된다.

4. trigger

- db에 대해 수정이 일어나면 자동으로 실행되는 sql구문을 말한다.

- 사용자로부터 db의 내용이 update되면 이후 필요한 추가 작업들을 trigger로 설정해둘 수 있다.

- 예를들어 학생이 수강하는 과목이 추가되고 학기말에 성적이 부여가 되면 trigger가 작동해서 학생의 tot_cred에 이 변화가 반영되도록 할 수 있다.

- 트리거의 이벤트는 update, insert, delete가 가능하다.

- 트리거를 활용하면 능동적인 dbms를 구현할 수 있다.

- credits_earned라는 이름의 트리거

- takes 테이블의 grade 컬럼이 업데이트 되면 호출된다.

- when절의 조건을 만족해야 begin...end사이의 동작이 수행된다.

- new row는 변경 후의 grade column의 값이고 old row 는 변경 전의 grade column의 값이다.

- 꼭 이벤트 발생 후에만 트리거를 호출할 수 있는 건 아니다. 이벤트 전에도 호출할 수 있다.

- 수정 구문이 실행되면 실행 직전에 트리거가 호출되어 ''공간을 null로 채워넣는 작업을 수행한다.

728x90
반응형

'ComputerScience > Database' 카테고리의 다른 글

DB - 25. JDBC 연습  (0) 2022.02.18
DB - 24. Normal Form  (0) 2021.12.14
DB - 22. Intermediate SQL 2  (0) 2021.12.05
DB - 21. Integrity Constraints  (0) 2021.12.01
DB - 20. Intermediate SQL - View  (0) 2021.11.30