본문 바로가기

데이터베이스 Database

Chapter 6 SQL - 함수 Function

함수란?

  • SP와 동일하게 데이터베이스에 저장되는 서브루틴이며 값을 리턴할 수 있음
  • 함수는 SQL 문장 내에서 사용할 수 있음
  • 함수의 구분
    • 사용자 정의 함수(UDF, User Defined Function)
    • 시스템 정의 함수(System Defined Function)

 

함수 정의 방법

CREATE [OR REPLACE] FUNCTION function_name (
    arg1 [IN | OUT | IN OUT] data_type,
    arg2 [IN | OUT | IN OUT] data_type,
    ...
)
< IS | AS >
    local_var1 data_type;
    ...
RETURN data_type;
BEGIN
    ...
    RETURN expression;
END;

 

함수 삭제 및 카탈로그 정보

  • 함수 삭제
DROP FUNCTION function_name;
  • 함수 카탈로그 정보 확인
    • ALL_OBJECTS: where절 조건에 object_type = 'FUNCTION' 사용
    • USER_PROCEDURES: 사용자가 정의한 프로시저 함수
    • USER_SOURCE: 함수 소스 코드(컴파일 에러가 발생한 것 포함)

 

함수 예

CREATE OR REPLACE FUNCTION to_str(year NUMBER)
RETURN nvarchar2
IS
    str nvarchar2(10);
BEGIN
    CASE year
        WHEN 1 THEN str := 'Fresh Man';
        WHEN 2 THEN str := 'Sophomore';
        WHEN 3 THEN str := 'Junior';
        WHEN 4 THEN str := 'Senior';
        ELSE str := '???';
    END CASE;
    RETURN str;
END;
/

함수 카탈로그 정보 확인

select sno, sname, to_str(year) from student;

select sno, sname, year from student
where to_str(year) = 'Senior';

 

create or replace function
to_str (y number)
return nvarchar2
is
    str nvarchar2(10);
begin
    case y
        when 1 then str := 'Fresh Man'; -- 할당연산자
        when 2 then str := 'Sophomore';
        when 3 then str := 'Junior';
        when 4 then str := 'Senior';
        else str := '???';
    end case;
    return str;
end;
/

select * from user_procedures where object_name = 'TO_STR';

select * from user_source;

select sno, sname, year from student
where to_str(year) = 'Senior';