본문 바로가기
개발/오라클

오라클 - function (펑션) 만들기 기초문법.

by 루 프란체 2018. 3. 17.

PL/SQL 에 매우 약한 나를 위해 남기는 펑션 만들기 기초문법!

기본적으로 펑션은 아래의 형태를 갖는다.

CREATE [OR REPLACE] FUNCTION FUNCTION_NAME
        [(argument1 [mode1] DATA_TYPE, argument2 [mode2] DATA_TYPE, ~~~반복~~~)]
RETURN
        타입 --세미콜론을 넣지 않는다. 넣으면 컴파일 에러!!
IS
        변수 변수타입;
BEGIN
        PL/SQL 작성;
END;

OR REPLACE

붙여도 상관없고 안 붙여도 상관은 없지만 붙이는 경우 이미 존재하는 펑션명이라면

기존 펑션의 내용을 지우고 재생성(이라기보다 수정?) 한다.

 

물론 붙이지 않는다면 해당 펑션명이 이미 존재한다는 에러를 뿜어내고 종료.

 

FUNCTION_NAME

당연하게도 펑션명인데 이름의 길이에는 제한이 있는 듯 하다.

아까 전에 엄청나게 길게 생성하려고 했더니 에러가 났다.

 

ARGUMENT1, ARGUMENT2~~~

펑션을 실행할 때에 받을 변수를 선언한다. 

선언하는 변수들에는 mode 를 지정할 수 있는데 해당 옵션의 종류는 다음과 같다.

 

IN - 입력 변수

OUT - 출력 변수

IN OUT - 입출력 변수

 

그러나 나는 IN 만 사용해봤기 때문에 다른 건 잘 모르겠다.

기본적으로 아무것도 적지 않는다면 IN 이 되는 것 같다.

 

그리고 이건 그냥 사족이지만 프로젝트에서 잘 살펴보면

보통 아규먼트로 받는 변수명 앞에는 I_ 를 많이 붙이고

출력 변수로 사용할 변수명 앞에는 O_ 를 많이 붙이고

프로시저 내에서 선언하는 내부 변수들에는 V_ 를 많이 붙이는 것 같았다. 

 

그리고 넘겨받는 아규먼트가 없다면 펑션명 뒤에 (괄호)를 붙이지 않아야 한다.

 

DATA_TYPE

해당 변수의 데이터 타입을 지정한다.

테이블명.컬럼명%TYPE 을 입력하면 해당 테이블의 해당 컬럼의 TYPE 을 참조한다.

 

RETURN

리턴 할 값의 데이터 타입을 지정한다.

변수값으로 받는 데이터 타입과 동일한 형식으로 작성할 수 있다.

 

IS 변수 변수타입;

이 곳에는 펑션 내부에서 사용할 변수들을 선언할 수 있다.

다음과 같이 사용한다.

 

V_TEMP1 VARCHAR2(20);

↑ 제일 뒤에 땀(세미콜론;)을 붙이는 것을 잊지 말자.

 

BEGIN ~ END;

BEGIN 과 END 사이에 PL/SQL 을 작성하면 된다.

마찬가지로 한 문장이 끝난다면 반드시 땀(세미콜론;)을 붙이는 것을 잊지 말자.

 

간단한 펑션 만들기 예제를 하나 올리고 이 포스팅은 끝!

CREATE OR REPLACE FUNCTION GET_TODAY_DATE_YYYYMMDD
	RETURN VARCHAR2
IS 
    V_DATE VARCHAR2(8); 
BEGIN 
    SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') 
      INTO V_DATE 
      FROM DUAL;  
      
    RETURN V_DATE; 
END;
 
---------------------------------------------
SELECT GET_TODAY_DATE_YYYYMMDD() FROM DUAL;

RESULT : 20180317

 

2018-03-18 GET_TODAY_DATE_YYYYMMDD.sql
다운로드

댓글