목적은 MAP 기능을 구현하기 위해서 찾아보기 시작했습니다.
TABEL정의를 해서 사용하면 된다고 하더군요.
DECLARE
TYPE t_cpn_map IS TABLE OF numeric(10) INDEX BY VARCHAR2(14);
cncl_cpn_map t_cpn_map;
begin
begin
dbms_output.put_line(cncl_cpn_map('A'));
EXCEPTION
when NO_DATA_FOUND then
cncl_cpn_map('A') := 444;
end;
dbms_output.put_line(cncl_cpn_map('A'));
cncl_cpn_map('A') := 323;
dbms_output.put_line(cncl_cpn_map('A'));
END;
처럼 작성해서 테스트 해 보았습니다.
수행해보니 잘 나옵니다.
444
323
Query returned successfully ...
하지만 제대로 function으로 컴파일 하기 위해 아래와 같이 변경하니 TYPE에서 오류가 난다고 합니다.
CREATE OR REPLACE FUNCTION fn_check_item(in p_value1 character varying)
RETURNS TABLE(rtn_cd character varying, rtn_msg character varying) as
$BODY$
DECLARE
v_rtn_cd varchar; -- 결과 코드
v_rtn_msg varchar; -- 결과 메시지
TYPE t_cpn_map IS TABLE OF numeric(10) INDEX BY VARCHAR2(14);
cncl_cpn_map t_cpn_map;
begin
begin
dbms_output.put_line(cncl_cpn_map('A'));
EXCEPTION
when NO_DATA_FOUND then
cncl_cpn_map('A') := 444;
end;
dbms_output.put_line(cncl_cpn_map('A'));
cncl_cpn_map('A') := 323;
dbms_output.put_line(cncl_cpn_map('A'));
v_rtn_cd := '00';
v_rtn_msg := '정상';
RETURN QUERY
SELECT v_rtn_cd as rtn_cd
,v_rtn_msg as rtn_msg
;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
컴파일 하면 오류가 발생합니다.
ERROR: syntax error at or near "TABLE"
LINE 36: TYPE cpn_map IS TABLE OF numeric(10) INDEX BY VARCHAR2(14);
^
CONTEXT: invalid type name "cpn_map IS TABLE OF numeric(10) INDEX BY VARCHAR2(14)"
********** Error **********
ERROR: syntax error at or near "TABLE"
SQL state: 42601
Character: 2354
Context: invalid type name "cpn_map IS TABLE OF numeric(10) INDEX BY VARCHAR2(14)"
이렇게요.
왜 그런걸까요?
MAP 처럼 순차가 아닌 특정 ID로 접근하는 기능은 어떻게 구현할 수 있을까요? |