본문 바로가기

오라클

오라클 사용자 정의 함수

목차

    프로그래밍을 하다 보면 각자 스타일이 다른 것을 알 수 있습니다.

    어떤 사람은 JAVA는 거들뿐 모든 계산을 쿼리를 통해 하고 화면에 보여주기만 하는 사람이 있는 반면

    반대로 어떤 사람은 DB에서는 ROW데이터를 가져와서 JAVA에서 계산을 하기도 합니다.

    물론 상황에 맞게 사용하는게 효율면에서도 유지보수면에서도 좋겠지만 자기가 편한 방식이 있으니까요.

     

     

    SQL 함수
    SQL 함수

     

     


     오라클 사용자 정의 함수 (User-defined functions)

    프로그램에서 어떤 사람의 상태를 과거 데이터를 가지고 판단해야 하는 경우가 있었습니다.

    그런데 판단한 결과를 CS프로그램에서도 사용하고 WEB에서도 사용해야 했습니다.

    CS와 WEB에 판단 로직을 두면 유지보수가 어려워 지기에 이런경우 오라클 사용자 정의 함수나 프로시저를 만들어 사용했습니다.

    CS나 WEB이나 DB에는 접근하여 같은 함수를 사용하니 같은 결과가 나오고 수정할 일이 생겨도 해당 함수만 수정하면 되었기에 자주 활용 했습니다.

    이렇게 개발자가 필요에 따라 직접 만들어 사용하는 함수는 사용자 정의 함수라고 합니다.

    함수는 기본적으로 단일값을 반환하는 단점이 있지만 SELECT에서 호출 할 수 있기때문에 자주 쓰입니다.

    물론 함수에서 TABLE 함수를 사용하면 여러 행의 데이터도 가능하지만 일반적으로는 단일값을 반환합니다.

    사용자 정의 함수는 일반적으로 데이터베이스 내의 패키지에 저장되어 다른 데이터베이스 객체와 함께 사용됩니다.

     

     

     

     

    사용자 정의 함수를 사용시 주의점

    • 명확한 함수 목적: 함수를 작성하기 전에 함수의 목적과 수행할 작업을 명확하게 정의해야 합니다. 함수는 특정 작업을 수행하고 결과를 반환하는 데 사용되므로, 목적이 불분명한 경우 함수의 효율성과 정확성에 영향을 줄 수 있습니다.
    • 적절한 매개변수 및 반환 유형: 함수의 입력 매개변수와 반환 유형을 올바르게 정의해야 합니다. 잘못된 데이터 유형이나 매개변수를 사용하면 예기치 않은 결과나 오류가 발생할 수 있습니다.
    • 예외 처리: 프로그램에서도 예외처리가 중요하듯 함수와 프로시저도 프로그램이므로 예외처리가 중요합니다. 오류가 발생할 가능성이 있는 코드를 실행할 때는 예외 처리를 사용하여 오류 메시지를 반환하거나 예상치 못한 값이 반환되지 않도록 처리해야 합니다.
    • 코드 최적화: 함수의 성능과 효율성을 높이기 위해 코드를 최적화해야 합니다. 불필요한 루프, 중복 코드, 비효율적인 연산 등을 최소화하고, 인덱스 및 힌트를 활용하여 쿼리 성능을 향상시키세요.
    • 단일 책임 원칙: 함수는 가능한 한 한 가지 작업만 수행해야 합니다. 여러 작업을 수행하는 복잡한 함수는 유지 관리가 어렵고, 오류가 발생하기 쉽습니다. 작업을 분리하여 여러 개의 작은 함수로 구성하는 것이 좋습니다.
    • 주석 및 문서화: 함수에 대한 주석을 작성하고, 함수의 목적, 입력 매개변수, 반환 값, 사용 방법 등에 대한 문서를 작성해야 합니다. 이렇게 하면 다른 개발자가 함수를 이해하고 사용하는 데 도움이 됩니다.
    • 테스트 및 검증: 함수를 작성한 후에는 다양한 입력 값과 시나리오에 대해 테스트하고 검증해야 합니다. 함수가 정확한 결과를 반환하고 예외 상황을 올바르게 처리하는지 확인해야 합니다.

     

    PL/SQL을 사용한 사용자 정의 함수

    CREATE [OR REPLACE] FUNCTION function_name
       [ (parameter [,parameter]) ]
       RETURN return_datatype
    IS
       [declaration_section]
    
    BEGIN
       executable_section
    
       [EXCEPTION
          exception_section]
    
    END [function_name];
    /

     

    • CREATE [OR REPLACE] FUNCTION: 함수를 생성하는 키워드입니다. OR REPLACE는 이미 존재하는 함수를 대체하고자 할 때 사용합니다.
    • function_name: 생성할 함수의 이름입니다.
    • (parameter [,parameter]): 함수의 매개변수를 정의하는 부분입니다. 매개변수가 없을 경우 생략할 수 있습니다.
    • RETURN return_datatype: 함수가 반환할 값의 데이터 타입을 정의합니다.
    • IS: 선언부와 실행부를 구분하기 위한 예약어입니다.
    • declaration_section: 함수 내부에서 사용할 변수, 상수, 타입 등을 정의하는 부분입니다. 생략 가능합니다.
    • BEGIN: 함수의 실행부를 시작하는 예약어입니다.
    • executable_section: 함수의 실행부입니다. 함수에서 수행할 로직을 작성합니다.
    • EXCEPTION: 예외 처리를 위한 예약어입니다.
    • exception_section: 예외 처리 코드를 작성하는 부분입니다.
    • END: 함수의 끝을 나타내는 예약어입니다.
    • /: 함수의 끝을 알리는 구분자입니다.