함수를 사용하는 이유
1. 코딩량을 줄일 수 있다.
2. 함수를 이용하여 모듈 단위로 접근할 수 있다.
3. 반복해서 재사용 할 수 있다.
함수 정의
********************************************************************************************************************
FUNCTION 함수명 [(파라미터 {IN|OUT|IN OUT})]
RETURN 반환데이터형
IS|AS
선언문
BEGIN
실행문
(EXCEPTION)
예외처리문
END 함수명;
/
********************************************************************************************************************
파라미터 IN/OUT : 함수 내부와 외부로 파라미터 전달
RETURN : 반환되는 데이터 형. 하나 이상의 RETURN문을 가질 수 있지만 오직 하나만 실행된다. 적어도 하나의 RETURN문은 존재.
IS | AS : 함수에 대한 변수를 지역적으로 설정.
BEGIN : 함수 안에 들어있는 문장의 실행을 시작.
EXCEPTION : 선택사항. 오류 발생시 적당한 처리를 할 수 있다.
END : 함수의 끝을 나타냄.
파라미터 정의하기
- 파라미터는 블럭에서 함수로 전달할 수 있는 값이다.
- 함수는 이 파라미터 값을 받아 일을 수행하고 결과를 반환하거나 반환하지 않을 수 있다.
- actual parameter : 실제 메모리에 저장된 파라미터 값
- formal parameter : actual parameter 에 대한 포인터
파라미터명 [MODE] 파라미터데이터형 [:= 값 | DEFAULT 값]
ex) v_stuid VARCHAR2
- MODE : 들어오는 파라미터를 제어하는 문장
① IN [NOCOPY] : 읽기전용 : 파라미터가 읽기 전용으로 되고, 값이 변경되는 것을 완전히 막을 수 있다.
② OUT [NOCOPY] : 쓰기전용 : 전달된 파라미터 값을 무시하고 함수 내에서 파라미터 값을 할당한다.
③ IN OUT [NOCOPY] : 읽기 또는 쓰기 : 파파미터를 제어. 함수를 종료할 때 함수내에서 작성된 값이 파라미터 값으로 할당된다.
- NOCOPY : 파라미터 값이 아주 큰 경우, 컴파일러에게 파라미터를 값이 아닌 참조(포인터)로 전달하라고 요청하는 힌트
파라미터에 값 할당하기
- 파라미터에 값을 할당하려면, := 또는 DEFAULT 를 사용한다.
- DEFAULT 를 사용하면 값을 지정하지 않으면 정해진 기본값으로 할당된다.
ex)
v_txn_count NUMBER := 10
v_stuid VARCHAR2 DEFAULT '-'
반환 데이터형
- 함수를 사용할 경우 반드시 반환되는 데이터의 데이텨형을 정의하여야 한다.
예외 (Exception)
- 함수나 프로시저 처리 중 오류가 발생하였을 경우 적절한 처리를 위해 작성한다.
- 구문
********************************************************************************************************************
EXCEPTION
WHEN OTHERS THEN
...
********************************************************************************************************************
스토어드 함수 (Stored Function)
- Stored Function 이란 PL/SQL 코드에서 호출할 수 있도록 데이터베이스에 저장된 함수.
- 일반 함수와 달리 stored 함수를 정의할 경우, CREATE [OR REPLACE] 를 사용하여 정의한다.
- 구문
********************************************************************************************************************
CREATE [OR REPLACE] FUNCTION 함수명 [ (파라미터 {IN | OUT | INOUT}) ]
RETURN 반환데이터형
IS | AS
선언문
BEGIN
실행문
(EXCEPTION)
에외처리문
END 함수명;
********************************************************************************************************************
[예제1] 파라미터가 없는 스토어드 함수 작성과 사용
********************************************************************************************************************
CREATE OR REPLACE FUNCTION mypi
RETURN NUMBER
IS
BEGIN
NULL;
RETURN 3.14;
END mypi;
/
********************************************************************************************************************
SQL> SET SERVEROUTPUT ON;
********************************************************************************************************************
BEGIN
DBMS_OUTPUT.PUT_LINE('mypi value is ' || mypi);
END;
/
********************************************************************************************************************
디버깅 (오류확인)
- 함수를 작성하다 Compile 에러가 발생하면 INVALID 상태가 되어 사용할 수 없다.
- show errors 명령으로 에러를 확인한다.
- 표시되는 숫자는 'LINE/COLUMN' 형식이며, 6/2 이라고 하면 6번째 줄에서 2번째 항목에 에러가 있다는 뜻.
[ 출처 ] http://blog.naver.com/tangamjaelt?Redirect=Log&logNo=36966369
'DataBase > PLSql' 카테고리의 다른 글
[PL/Sql] PL/Sql 조건문 사용 (0) | 2012.08.13 |
---|---|
[PL/Sql] PL/Sql 패키지 사용 예 (0) | 2012.08.13 |
[PL/Sql] PL/Sql 연산자 (0) | 2012.08.13 |
[PL/Sql] PL/Sql 블럭구조 (0) | 2012.08.13 |
[PL/Sql] PL/Sql 데이터형 (0) | 2012.08.13 |