반응형
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 | 31 |
Tags
- 싱글톤
- @Configuration
- DIP
- java
- 스프링 부트 입문
- DI
- assertThat
- jdbc
- 스프링 부트 기본
- 스프링 부트
- mybatis
- 스프링부트
- Effective Java
- 스프링 프레임워크
- springboot
- JPA
- kafka
- db
- assertThrows
- thymeleaf
- sqld
- SQL
- 필드 주입
- 생성자 주입
- resultMap
- spring
- Javascript
- 스프링 컨테이너
- 스프링 빈
- 스프링
Archives
- Today
- Total
선 조치 후 분석
[DB] 프로시저(Procedure) VS 사용자 정의 함수(Function) 차이 본문
728x90
반응형
SMALL
프로젝트를 진행하다가 프로시저(Procedure)를 사용할 때 있고, 함수(Function)를 사용할 때가 있는 걸 알게 되었다.
제대로 DB를 공부해본 적이 없는 나로서는 둘의 차이가 뭔지 궁금증을 갖게 되었다.
프로시저(Procedure) 란?SQL에서 제공하는 프로그래밍 기능으로서 쿼리문을 마치 하나의 메서드 형식으로 만들고 어떠한 동작을 일괄적으로 처리하는 용도 |
CREATE OR REPLACE PROCEDURE 프로시저 이름
( 매개변수명1[ IN | OUT | IN OUT ] 데이터타입[:= 디폴트값],
매개변수명2[ IN | OUT | IN OUT ] 데이터타입[:= 디폴트값], ... )
IS[AS]
변수, 상수 등 선언
BEGIN
실행
[EXCEPTION 예외처리부]
END [프로시저 이름]
사용자 정의 함수(Function) 란?절차형 SQL을 활용하여 일련의 SQL 처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL |
CREATE OR REPLACE FUNCTION 함수 이름 (매개변수1, 매개변수2....)
RETURN 데이터 타입;
IS[AS]
변수, 상수 선언..
BEGIN
실행부
RETURN 반환값
[EXCEPTION 예외처리부]
END [함수 이름];
내 기준에서는 구조도 같아 보이고, 결국 값을 얻기 위함이면 굳이 왜 나눠서 사용하지? 이런 생각이 든다.
그래서 좀 더 알아보았다.
프로시저 | 함수 |
작업 수행 | 계산 수행 |
리턴값 0개 or 1개 or 여러개 | 리턴값 오직 1개 |
서버에서 실행 (속도가 더 빠름) | 클라이언트에서 실행 |
SELECT 문에서 호출 불가능 (EXEC or EXECUTE로 호출) | SELECT 문에서 호출 가능 |
개인적으로 간추려보면, 프로시저는 복잡한 트랜잭션을 수행, 연속 실행(배치)을 위해서 사용하고,
함수는 단순한 계산을 수행해서 값을 얻기 위해서 사용하는 것 같다.
솔직히 아직도 의문인 건, 굳이 그럼 나눠서 사용 안 하고 프로시저로 돌리면 안 되는 건가?라는 생각이 든다.
해결하지 못한 궁금증은 차근차근 알아가 봐야겠다.
728x90
반응형
LIST
'Solution > DB' 카테고리의 다른 글
[SQL] WHERE 절 <if> 와 <isNotEmpty> 차이 (0) | 2022.02.14 |
---|---|
DECODE 함수 사용법 (0) | 2021.12.28 |
[MyBatis] resultMap? resultClass? 차이는? (0) | 2021.11.16 |
[Oracle] 테이블 생성법 (CRATE, PK, COMMENT) + MySQL과의 차이점 (0) | 2021.11.09 |
[SQL] SELECT .* VS SELECT 컬럼명 조회문 차이? (0) | 2021.11.08 |