게시일: Jan 15, 2012 11:44:31 PM
- 사용자 정의 함수의 RESULT_CACHE 절
사용자 정의 함수의 경우 호출되는 횟수가 많아지면 시스템의 성능에 영향을 미칠 수 밖에 없다. 그런데 11g에서는 세션별로 이미 한 번 실행된 함수의 경우 이를 재차 사용하게 되면 이전에 실행되었던 결과를 메모리에서 기억하고 있다가 다음 번에 실행될 때 이 값을 재활용할 수 있는 기능을 하는 RESULT_CACHE 절을 제공한다. 예를들어, GET_DEPT_NAME 함수를 사용하는 SQL 문장을 여러 개 작성할 경우, 맨 처음 문장을 실행할 때는 이 함수를 사용하여 그 결과값을 가지고 있지만, 두 번째 문장의 경우에는 다시 실행하지 않고 메모리에 있는 값을 읽어 결과를 반환하게 된다.
CREATE OR REPLACE FUNCTION get_dept_name ( dept_id NUMBER )
RETURN VHARCHAR2 RESULT_CACHE RELIES ON ( departments )
IS
sDeptname VARCHAR2(100);
BEGIN
SELECT department_name
INTO sDeptname
FROM departments
WHERE department_id = dept_id;
RETURN sDeptname;
END;
** 참고 **
RELIES ON ( departments ) : departments 테이블에 데이터의 변경이 가해지고 COMMIT이 수행될 경우, 이전에 메모리에 기억된 값은 더 이상 유효한 값이 되지 않으며 다시 호출되면 함수를 실행하여 새로운 결과값을 메모리에 로드하게 된다.
- CONTINUE 문
반복문 내에서 특정 조건을 만족하면 이하 처리루틴을 생략하고 바로 다음 조건으로 넘어가게 한다.
CONTINUE WHEN MOD(value,2) <> 0;
- 함수와 프로시저 명명법 개선
함수나 프로시저의 파라미터 갯수가 많아지면 이들을 호출하는 문장이나 구문에서 매우 혼동될 수 있다(파라미터의 갯수는 물론이고 데이터 타입도 정화시 명시해야 한다.). 11g에서는 좀 더 쉽게 이들을 사용할 수 있는 방법을 도입하였다.
SELECT my_11g_func ( p1 => col1, p2 => 10, ... , p7 => 30 )
from dual;
이 SELECT 문장에서 굵게(붉은색) 표시된 부분이 11g부터 새로 도입된 내용이다. 즉 '파라미터 이름 => 값'을 사용하여 사용자들로 하여금 함수나 프로시저를 좀 더 쉽고 오류없이 사용할 수 있게 하고 있다.