[Oracle] Function/Procedure 차이점, 사용법, 예제
반응형
오라클을 작성하는중 특정한 값을 반환해야 하는 매서드 같은 기능이 필요로 할때가 있다.
(예를들면 특정한 코드를 넣으면 해당 코드값의 명칭이 나온다거나 하는..
그런경우 Function과 Procedure를 처음 사용한다면 어떤걸 써야할지 잘 모를수 있기에 포스팅..
일반적으로 Function은 리턴값이 있고 Procedure는 리턴값이 없다. 라는 말을 찾을 수 있는데 반만 맞는 말이다.
Function 작성 양식
CREATE OR REPLACE FUNCTION /*Function Name*/
( /*파라미터*/
/*양식 : 파라미터명 파라미터 타입
IN_VALUE1 VARCHAR2,
IN_VALUE2 NUMBER,
IN_VALUE3 TABLENAME.COLUMN
*/
)
RETURN /*데이터타입*/
IS||AS
/*선언부
P_DATA := NULL;
P_DATA2 := 0;
*/
BEGIN
/*실행부*/
RETURN 반환값
/* 문제발생시 */
EXCEPTION 문장 //필수아님
END ;
Function 작성 예제
날짜 6자리나 8자리를 입력받아 1일 혹은 마지막날 가져오는 FUNCTION.
CREATE OR REPLACE FUNCTION FN_GET_DATE(
IN_DATE IN VARCHAR2,
IN_TYPE IN VARCHAR2 )
RETURN VARCHAR2
IS
V_DATA VARCHAR2(10) := NULL;
V_IN_DATE VARCHAR2(20) := NULL;
BEGIN
BEGIN
IF LENGTH(TRIM(IN_DATE)) = 8 THEN
V_IN_DATE := IN_DATE;
ELSIF LENGTH(TRIM(IN_DATE)) = 6 THEN
V_IN_DATE := IN_DATE||'01';
ELSE
RETURN NULL;
END IF;
IF(IN_TYPE = 'FDATE') THEN
V_DATA := LAST_DAY(TO_DATE(V_IN_DATE,'YYYYMMDD'));
ELSIF(IN_TYPE ='TDATE') THEN
V_DATA := LAST_DAY(TO_DATE(V_IN_DATE,'YYYYMMDD'));
ELSE
RETURN NULL;
END IF;
EXCEPTION
WHEN OTHERS THEN RETURN NULL;
END;
RETURN TO_DATE(V_DATA);
END;
Procedure 작성양식
CREATE OR REPLACE PROCEDURE 프로시저 이름
( /*파라미터*/
/*
//이름 [IN/OUT/INOUT] 타입
IN_VALUE1 IN VARCHAR2
OUT_VALUE1 OUT NUMBER
*/
)
IS||AS
/*선언*/
/*
P_DATA := NULL;
P_DATA2 := 0;
*/
BEGIN
/*실행*/
/*문제발생시*/
EXCEPTION 문장 //필수아님
END ;
Procedure 작성예제
Function/ Procedure 차이점
참조링크
요약..
Function
- 입력을 기반으로 파생 ( 입력된값을 가지고 재가공 )
Procedure
- 입력을 기반으로 수행 ( 입력된값을 가지고 테이블에 입력)
때문에 Funtion에 DML을 수행 시키는 것은 매우 드물며(가능은하나 권장x)
Procedure에서 일반적으로 Return값을 사용하지 않을것...
때문에 반환값이 있더라도 Sql에서 Procedure를 호출할 수 없다 라고 할 수 있다..
즉 Procedure와 Function의 차이점에 대한 답은
return값의 유무가 아닌
Function은 입력을 기반으로 파생, Procedure는 입력을 기반으로 수행한다. . 이라고 볼 수 있겠다..
반응형
'Study > Oracle' 카테고리의 다른 글
[Oracle] to_date사용 요령 (문자열을 DateTime형태로) (0) | 2023.03.22 |
---|---|
[ORACLE] 오라클 클라우드 자바접속 (VS CODE) (0) | 2022.04.14 |
[ORACLE] DROP, DELETE, UPDATE등 원복 (TIMESTAMP, FLASHBACK) (0) | 2022.04.12 |
[ORACLE] JOIN 종류와 사용법 (0) | 2022.04.08 |
[ORACLE] EXISTS, NOT EXISTS (0) | 2022.04.07 |
댓글