본문 바로가기
인천일보아카데미/- 학습일지

[학습일지]JAVA교육일지 59일차

by w1z 2022. 6. 28.

1. 함수


1. 함수

[ 함수와 프로시저 비교 ]

  1) 함수

   - 반드시 매개 변수가 있어야 한다. (갯수는 0개 이상, 일반적으로는 1개 이상)

   - 반드시 반환값이 있어야 한다.

 

  2) 프로시저

   - 반드시 매개 변수가 있어야 한다. (갯수는 0개 이상, 일반적으로는 1개 이상)

   - 반환값이 0개 이상 (OUT 파라미터 x N개 생성)

 

[ 함수 작성 방법 ]

<Java의 메소드 작성 방법과 유사하다.>

--JAVA 방법
public int test(int num1, int num2) { return num1 }

--DATABASE 방법 
CREATE OR REPLACE FUNCTION test (num1 NUMBER, num2 NUMBER) RETURN NUMBER;

-- 작성 예시)
-- 함수 생성
CREATE OR REPLACE FUNCTION fnSum (
    pnum1 NUMBER, 
    pnum2 NUMBER
) RETURN NUMBER;
IS
BEGIN
    RETURN pnum1 + pnum2;
END fnSum;

-- 함수 호출
DECLARE
	vresult NUMBER;
BEGIN
    vresult := fnSum(100, 200);
    DBMS_OUTPUT.PUT_LINE(vresult);
    DBMS_OUTPUT.PUT_LINE(fnSum(200, 300));
END;
----> 300
----> 500

 

[ 함수 활용 예제 ]

- 함수는 ANSI-SQL에서도 사용이 가능하다.

-- 예시1)
-- 위에서 작성 했던 예시 함수를 ANSI-SQL에서 사용하기
SELECT NAME, BASICPAY, SUDANG, fnSum(BASICPAY + SUDANG) FROM TBLINSA;

-- 예시2) 
SELECT NAME, BUSEO, JIKWI,
    CASE
        WHEN SUBSTR(SSN, 8, 1) = '1' THEN '남자' --주민번호 뒷자리 첫번째 자리가 1이면 남자
        WHEN SUBSTR(SSN, 8, 1) = '2' THEN '여자' --주민번호 뒷자리 첫번째 자리가 2이면 여자
    END AS GENDER
FROM TBLINSA;

-- 위 코드를 함수로 만들기
CREATE OR REPLACE FUNCTION fnGender(
    pssn VARCHAR2
) RETURN VARCHAR2
IS
BEGIN
    return CASE
               WHEN SUBSTR(pssn, 8, 1) = '1' THEN '남자' --주민번호 뒷자리 첫번째 자리가 1이면 남자
               WHEN SUBSTR(pssn, 8, 1) = '2' THEN '여자' --주민번호 뒷자리 첫번째 자리가 2이면 여자
           END
END;

-- 함수 호출
SELECT NAME, BUSEO, JIKWI, fnGender(ssn) FROM TBLINSA; 

 

[ 요약 ]

저장 함수:  ANSI-SQL을 보조 하는 역할

저장 프로시저:  행동의 단위(메소드 개념)


MEMO>

 

# RETURN (반환값)을 사용하면 함수, OUT (파라미터) 을 사용하면 프로시저라고 생각하라는데 모르겠는데??