Oracle 함수 파라미터 in절 1 3 1,251

by 민속주점 [PL/SQL] [2020.06.24 09:25:25]


안녕하세요.

 

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에러 만 납니다.

해결 부탁드립니다.

 

 

 

 

 

by JYK94 [2020.06.24 09:39:11]

의심되는 구간은 1. P_CASE 가 정의되어있지 않음

2. EXECUTE절에 P_CASE_CD 역시 정의되어있지 않음


by 마농 [2020.06.24 09:39:43]
-- 변수 처리가 아닌 문자열 이어 붙이기 형태로 하셔야죠.
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;

 


by 민속주점 [2020.06.24 11:51:28]

IN절에 포함시킬 대상을 변수로 받아서 문제가 되었네요.

빠른 해결해주셔서 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입