안녕하세요.
Oracle 함수 호출시 파라미터를 IN절로 주고 싶은데요...
동적SQL로 하려고 했지만 잘안되서 도움요청드립니다.
create or replace FUNCTION FN.....
(
IN_A IN VARCHAR2
) RETURN VARCHAR2 IS
rtn_val VARCHAR2(100);
V_SQL VARCHAR2(32675);
BEGIN
SELECT '''200'',''290''' STR
INTO P_CASE
FROM DUAL;
V_SQL :=
' SELECT AAA
FROM T
WHERE 1=1
AND CASE IN ( :1 )
AND CODE = :2 ';
EXECUTE IMMEDIATE V_SQL INTO rtn_val USING P_CASE_CD, IN_A ;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20938,SQLERRM);
rtn_val := 'ERROR';
END;
RETUN rtn_val;
END FN.....
이렇게 함수 호출하면 데이터를 찾을 수없다는 SQL에러 만 납니다.
해결 부탁드립니다.
-- 변수 처리가 아닌 문자열 이어 붙이기 형태로 하셔야죠. p_case_cd := '''200'',''290'''; -- 변경전 -- v_sql := 'SELECT aaa FROM t WHERE case_cd IN (:1) AND code = :2'; EXECUTE IMMEDIATE v_sql INTO rtn_val USING p_case_cd, in_a; -- 변경후 -- v_sql := 'SELECT aaa FROM t WHERE case_cd IN (' || p_case_cd || ') AND code = :2'; EXECUTE IMMEDIATE v_sql INTO rtn_val USING in_a;