Web develop/SQL

[SQL/ORACLE] 저장함수(Stored Function) 형식 및 사용방법

ForA 2019. 6. 16. 15:11
728x90

저장함수

  • Procedure와 달리 실행(함수호출)후 결과를 되돌려 받을 수 있는 return 데이터; 를 반드시 명시해야 함
      CREATE [OR REPLACE] FUNCTION 함수명(매개변수 선언)
          RETURN 자료형
          IS
              변수선언
          BEGIN
              (순차적으로)실행할 SQL문
              RETURN 데이터;
      END;
      /

사용법

  1. CREATE FUNTION~ (함수를 DB에 저장) — 함수 생성
  2. VARIABLE 바인드변수명 자료형; — 변수 선언
  3. EXEC[UTE] :바인드변수명 := 함수명() — 함수호출, 결과값 저장
  4. PRINT 바인드변수명; — 저장 값 확인
    자바와 비교한 참고)
    void hello(String name){
        System.out.println("안녕,"+name);
    } -----> Stored Procedure (리턴키워드 없고)
    String hi( ){
         return "좋은 하루~!!";
      }
     -----> Stored Function (리턴키워드 있고)
  • 문제) 특정사원에게 보너스를 지급하려고 하는데 급여의 200%에 해당하는 비용을 지급하려 한다.
    이 보너스 금액을 FUNTION을 통해 구하시오 + 보너스비율
    CREATE OR REPLACE FUNCTION call_bonus(vename emp.ename%type)
        RETURN NUMBER
        IS
            vsal emp.sal%type;
            bonus NUMBER;
        BEGIN
         SELECT sal INTO vsal FROM emp WHERE ename = vename;
         bonus := vsal *2;
         RETURN bonus;
    END;
    /

    variable bonus number; --리턴받을 변수 선언
    execute :bonus := call_bonus('SMITH');
    print bonus;