--오라클 펑션
CREATE OR REPLACE FUNCTION TEST2 (as_gu VARCHAR2) RETURN NUMBER IS AMT_1 NUMBER(13); AMT_2 NUMBER(13); AMT_3 NUMBER(13); AMT_4 NUMBER(13); AMT_5 NUMBER(13); BEGIN AMT_1 := 1; AMT_2 := 2; AMT_3 := 3; AMT_4 := 4; AMT_5 := 5; IF as_gu = 'AMT_1' THEN RETURN AMT_1 ; ELSIF as_gu = 'AMT_2' THEN RETURN AMT_2 ; ELSIF as_gu = 'AMT_3' THEN RETURN AMT_3 ; ELSIF as_gu = 'AMT_4' THEN RETURN AMT_4 ; ELSIF as_gu = 'AMT_5' THEN RETURN AMT_5 ; END IF; END;
위와 같은 펑션에서요,,
IF as_gu = 'AMT_1' THEN RETURN AMT_1 ;
ELSIF as_gu = 'AMT_2' THEN RETURN AMT_2 ;
ELSIF as_gu = 'AMT_3' THEN RETURN AMT_3 ;
ELSIF as_gu = 'AMT_4' THEN RETURN AMT_4 ;
ELSIF as_gu = 'AMT_5' THEN RETURN AMT_5 ;
END IF;
위 부분을 동적으로 수정이 가능할까요??
위 예시문에서는 5개가 전부이지만 실제로는 20개가 넘어 가는데
불필요한 하드코딩을 줄여 보고싶어서요~
고수님들의 고견을 기다리겠습니다!
-- 코드테이블로 별도 관리하는 방안이 좋을 듯 합니다.
-- 1. 코드 테이블 생성
CREATE TABLE code_test
(gu VARCHAR2(10) PRIMARY KEY, amt NUMBER(13))
;
-- 2. 코드 값 입력
INSERT INTO code_t VALUES('AMT_1', 1);
INSERT INTO code_t VALUES('AMT_2', 2);
INSERT INTO code_t VALUES('AMT_3', 3);
INSERT INTO code_t VALUES('AMT_4', 4);
INSERT INTO code_t VALUES('AMT_5', 5);
COMMIT;
-- 3. 코드테이블 이용하는 함수
CREATE OR REPLACE FUNCTION test2(as_gu VARCHAR2)
RETURN NUMBER
IS
v_amt NUMBER(13);
BEGIN
BEGIN
SELECT amt
INTO v_amt
FROM code_test
WHERE gu = as_gu
;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_amt := 0;
END;
RETURN v_amt;
END;
/
우선 답변 너무 감사드립니다..!
제가 소스를 너무 많이 줄이는 바람에 의도가 잘못 전달 된 듯 합니다..
BEGIN AMT_01 := (계산식에 의한 계산결과값01) ; AMT_02 := (계산식에 의한 계산결과값02) ; AMT_03 := (계산식에 의한 계산결과값03) ; AMT_04 := (계산식에 의한 계산결과값04) ; AMT_05 := (계산식에 의한 계산결과값05) ; AMT_06 := (계산식에 의한 계산결과값06) ; AMT_07 := (계산식에 의한 계산결과값07) ; AMT_08 := (계산식에 의한 계산결과값08) ; AMT_09 := (계산식에 의한 계산결과값09) ; AMT_10 := (계산식에 의한 계산결과값10) ; AMT_11 := (계산식에 의한 계산결과값11) ; AMT_12 := (계산식에 의한 계산결과값12) ; AMT_13 := (계산식에 의한 계산결과값13) ; AMT_14 := (계산식에 의한 계산결과값14) ; AMT_15 := (계산식에 의한 계산결과값15) ; AMT_16 := (계산식에 의한 계산결과값16) ; AMT_17 := (계산식에 의한 계산결과값17) ; AMT_18 := (계산식에 의한 계산결과값18) ; AMT_19 := (계산식에 의한 계산결과값19) ; AMT_20 := (계산식에 의한 계산결과값20) ; IF as_gu = 'AMT_01' THEN RETURN AMT_01 ; ELSIF as_gu = 'AMT_02' THEN RETURN AMT_02 ; ELSIF as_gu = 'AMT_03' THEN RETURN AMT_03 ; ELSIF as_gu = 'AMT_04' THEN RETURN AMT_04 ; ELSIF as_gu = 'AMT_05' THEN RETURN AMT_05 ; ELSIF as_gu = 'AMT_06' THEN RETURN AMT_06 ; ELSIF as_gu = 'AMT_07' THEN RETURN AMT_07 ; ELSIF as_gu = 'AMT_08' THEN RETURN AMT_08 ; ELSIF as_gu = 'AMT_09' THEN RETURN AMT_09 ; ELSIF as_gu = 'AMT_10' THEN RETURN AMT_10 ; ELSIF as_gu = 'AMT_11' THEN RETURN AMT_11 ; ELSIF as_gu = 'AMT_12' THEN RETURN AMT_12 ; ELSIF as_gu = 'AMT_13' THEN RETURN AMT_13 ; ELSIF as_gu = 'AMT_14' THEN RETURN AMT_14 ; ELSIF as_gu = 'AMT_15' THEN RETURN AMT_15 ; ELSIF as_gu = 'AMT_16' THEN RETURN AMT_16 ; ELSIF as_gu = 'AMT_17' THEN RETURN AMT_17 ; ELSIF as_gu = 'AMT_18' THEN RETURN AMT_18 ; ELSIF as_gu = 'AMT_19' THEN RETURN AMT_19 ; ELSIF as_gu = 'AMT_20' THEN RETURN AMT_20 ; END IF; END;
이런식으로 구성 됐을 경우,,
받은 구분값의 텍스트를 변수로 인식 시켜서 리턴 하고 싶은데 방법이 없을까요..
그냥 저런식으로 일일이 다 적어주는 방법이 최선인건지가 궁금합니다..!
감사합니다!