반응형
해당 글에서는 Dbeaver 툴을 이용하여서 Function, Proecedure를 생성하고 호출하는 예시를 위해 작성한 글입니다.
💡 해당 글을 읽으시기 전에 이전에 작성한 개념에 대한 이해를 하고 오시면 크게 도움이 됩니다.
1) DBeaver Function, Stored Procedure 구축
💡 DBeaver 툴 내에서 간략한 PL/pgSQL인 Function과 Stored Procedure를 구축합니다.
1. Function, Stored Procedure를 구축할 데이터베이스 - 스키마를 선택합니다
💡 multiflex 데이터베이스의 multiflex_scma 스키마로 지정하였습니다
[ 더 알아보기 ]
💡 데이터베이스(Database)란?
- 여러 개의 테이블을 포함하는 데이터 저장소를 의미하며 이를 통해 데이터를 구성하고 조직화하는 데 사용됩니다.
💡 데이터베이스 스키마(Database Schema)란?
- 데이터베이스의 구조를 정의하는데 사용되는 개념입니다. 데이터베이스의 테이블, 열, 제약 조건, 키 등에 대한 정보를 포함합니다.
2. 생성하려는 스키마의 Functions 폴더 오른쪽 마우스 - Create New Function 버튼을 누릅니다.
3. Create new procedure/function 팝업이 출력되며 Name과 Return Type을 지정하고 ‘확인’ 버튼을 누릅니다.
💡 해당 부분에서는 Function과 Procedure를 함께 생성해 봅니다.
[ 더 알아보기 ]
💡 SQL Function의 네이밍 규칙
- 보편적으로 사용하는 네이밍 규칙입니다. 각각의 회사 별로 지정한 네이밍 규칙은 달라집니다.
1. 함수의 이름은 일반적으로 동사나 동사구로 시작합니다.
2. 함수가 수행하는 작업을 설명하는 이름으로 지정해야 합니다.
3. 함수의 이름은 명확하고 간결해야 하며 이름이 너무 길 경우, 코드를 읽기 어려워질 수 있습니다.
예시) GET_TOTAL_AMOUNT, CALCULATE_AVERAGE_SALES
💡 SQL Procedure의 네이밍 규칙
- 보편적으로 사용하는 네이밍 규칙입니다. 각각의 회사 별로 지정한 네이밍 규칙은 달라집니다.
1. 패키지명, 프로시저명을 모두 대문자로 작성합니다.
2. 프로시저의 목적을 나타내도록 작성합니다.
3. 프로시저 이름은 동사로 시작합니다.
4. 프로시저 이름은 띄어쓰기를 사용하지 않고, 단어 사이에 언더바('_')를 사용합니다.
5. 프로시저 이름은 가능한 짧게 작성합니다.
4. Function / Procedure가 생성됨을 확인하였습니다.
5. 생성된 Function을 선택 - ‘소스’ 탭을 누르면 생성된 함수의 소스코드를 확인할 수 있습니다.
6. 소스코드를 입력합니다.
6.1. Function 구성
💡 SQL문을 입력한 뒤 저장 버튼을 누르면 저장이 됩니다.
CREATE function multiflex_scma.hello_world(name TEXT)
RETURNS TEXT AS $$
DECLARE
greeting TEXT;
BEGIN
greeting := 'Hello, ' || name || '!';
RETURN greeting;
END;
$$ LANGUAGE plpgsql;;
[ 예시 설명 ]
- 1행: hello_world라는 이름에 인자로 name을 받는 함수를 생성하였습니다.
- 2행: 해당 함수의 반환 값은 TEXT 타입입니다.
- 4행~5행: 함수 내부적으로 변수로 greeting이라는 TEXT 타입의 변수를 선언하였습니다.
- 6행~9행: greeting 변수는 name 인자와 "Hello, " 및 "!" 문자열을 연결한 문자열로 설정됩니다. 마지막으로 함수는 greeting 변수를 반환합니다.
💡 최종적으로 hello_world 함수에 name의 인자를 넣어서 호출을 하면 hello, {name}!이라는 문자열을 반환해 주는 함수입니다.
[ 더 알아보기 ]
💡 CREATE function과 CREATE OR REPLACE FUNCTION의 차이
- CREATE FUNCTION: 함수가 존재하지 않을 때만 함수가 생성됩니다. 이미 존재하는 함수 이름이 있으면 오류가 발생합니다.
CREATE OR REPLACE FUNCTION: 함수가 이미 존재하면, 기존 함수를 대체합니다. 함수가 존재하지 않으면 새로운 함수가 생성됩니다.
6.2. Procedure 구성
CREATE PROCEDURE hello_world(name TEXT)
LANGUAGE plpgsql
AS $$
DECLARE
greeting TEXT;
BEGIN
greeting := 'Hello, ' || name || '!';
RAISE NOTICE '%', greeting;
END;
$$;
[ 예시 설명 ]
- 1행: hello_world라는 이름에 인자로 name을 받는 프로시저를 생성하였습니다.
- 2행: 해당 프로시저가 작성된 언어를 지정합니다.
- 4행~5행: 함수 내부적으로 변수로 greeting이라는 TEXT 타입의 변수를 선언하였습니다.
- 6행~7행: greeting 변수는 name 인자와 "Hello, " 및 "!" 문자열을 연결한 문자열로 설정됩니다.
- 8행 : 해당 프로시저가 종료되기 전 콘솔로 전달이 됩니다.
💡 최종적으로 hello_world 프로시저에 name의 인자를 넣어서 호출을 하면 hello, {name}!이라는 문자열을 콘솔로 반환해 주는 프로시저입니다.
7. 입력한 소스코드를 저장합니다
8. 생성한 스키마를 선택하고 ‘Set as default’ 버튼을 눌러줍니다.
9. SQL 아이콘을 선택해 줍니다.
10. Function과 Procedure를 호출하였을 때 잘 됨을 확인하였습니다
-- Function 호출
SELECT func_get_name('adjh54')
-- Procedure 호출
CALL proc_get_name('adjh54')
[ 더 알아보기 ]
💡 함수(Function)는 SELECT문으로 호출하는데 프로시저(Procedure)는 CALL문으로 호출하는 이유는?
- SQL에서 함수는 단일 값이나 값 테이블을 반환하는 데 사용되며 프로시저는 특정 작업이나 작업을 수행하는 데 사용됩니다
.
- 함수는 값이나 값 테이블을 반환하는 데 사용되며 프로시저는 특정 작업이나 작업을 수행하는 데 사용됩니다. 이러한 이유로 함수는 반환된 값을 검색하기 위해 'select' 문을 사용하여 호출되고 프로시저는 프로시저 내에 정의된 작업 집합을 실행하기 위해 'call' 문을 사용하여 호출됩니다.
💡 [참고] 저장 프로시저에 대해 관심이 있으시면 아래의 글도 도움이 됩니다.
분류 | 링크 |
[DB/Postgres] PL/pgSQL 이해-1 : Function, Stored Procedure | https://adjh54.tistory.com/159 |
[DB/Postgres] PL/pgSQL 구성하기 -2 : DBeaver 기반 구축 및 활용 | https://adjh54.tistory.com/168 |
[DB/Postgres] 저장 프로시저로 Dummy 데이터 만드는 방법 | https://adjh54.tistory.com/401 |
[DB/Postgres] 저장 프로시저 매개변수 사용방법: IN, OUT, INOUT | https://adjh54.tistory.com/408 |
[DB/Postgres] PL/pgSQL 함수, 프로시저 예외처리 사용방법 : Exception Handling | https://adjh54.tistory.com/413 |
[DB/Postgres] SQLSTATE Code 목록 : SQL 오류코드 | https://adjh54.tistory.com/412 |
[Java] MyBatis에서 저장 프로시저 호출 방법 | https://adjh54.tistory.com/409 |
오늘도 감사합니다. 😀
반응형
'DB > 이론 및 문법' 카테고리의 다른 글
[DB/Postgres] 뷰 테이블(View Table) 이해하고 활용하기 (0) | 2023.09.22 |
---|---|
[DB] 관계형 데이터베이스 키(Key) 이해하기 (0) | 2023.09.09 |
[DB/Postgres] 테이블 스캔 -1 : 전체, 인덱스(전체, 범위, 고유, 루스, 병합) 스캔 (2) | 2023.04.09 |
[DB/Postgres] GROUP BY, ORDER BY, LIMIT 이해하기 -1 (0) | 2023.04.08 |
[DB/Postgres] PL/pgSQL이해하기 -1 : Function, Stored Procedure (0) | 2023.04.08 |