많은 관심과 도움 감사 합니다.
전체 프로시져를 올리겠습니다.
아래와 같이 하면 정상 컴파일은 되는데 '추출행 없음'' 이 바로 나와버립니다.
분명히 건수가 존재하는 쿼리 거든요.
v_item_code_all := '1010';
이렇게 하드코딩으로 테스트 하면 제대로 1건이 나옵니다
그런데..
v_item_code_all := i_1||','||i_2||','||i_3||','||i_4||','||i_5;
이렇게 아규먼트를 붙여서 할려고 하면 안됩니다.
고수님들의 도움을 기다립니다.
CREATE OR REPLACE PROCEDURE ina (i_1 varchar2,
i_2 varchar2,
i_3 varchar2,
i_4 varchar2,
i_5 varchar2) IS
vCURSOR_ID INTEGER;
vDUMMY INTEGER;
v_DynamicSQL VARCHAR2(10000) := '';
v_item_code_all varchar2(100);
v_a varchar2(1);
v_item_year varchar2(4);
v_mgroup varchar2(2);
v_cnt number := 0;
BEGIN
v_DynamicSQL := v_DynamicSQL||' SELECT to_char(1), ';
v_DynamicSQL := v_DynamicSQL||' decode(item_year, ''2004'',''2004'',''X''), ';
v_DynamicSQL := v_DynamicSQL||' mgroup ';
v_DynamicSQL := v_DynamicSQL||' from TITEM where item_code in (';
v_DynamicSQL := v_DynamicSQL||' :v_item_code_all';
v_DynamicSQL := v_DynamicSQL||')';
v_DynamicSQL := v_DynamicSQL||' AND item_year = ' ;
v_DynamicSQL := v_DynamicSQL||' :v_item_year';
v_item_code_all := i_1||','||i_2||','||i_3||','||i_4||','||i_5;
v_item_year := '2004';
BEGIN
vCURSOR_ID := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(vCURSOR_ID, v_DynamicSQL, DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(vCURSOR_ID, ':v_item_code_all', v_item_code_all);
DBMS_SQL.BIND_VARIABLE(vCURSOR_ID, ':v_item_year', v_item_year);
DBMS_SQL.DEFINE_COLUMN(vCURSOR_ID, 1, v_a, 1 );
DBMS_SQL.DEFINE_COLUMN(vCURSOR_ID, 2, v_item_year,4 );
DBMS_SQL.DEFINE_COLUMN(vCURSOR_ID, 3, v_mgroup,2 );
vDUMMY := DBMS_SQL.EXECUTE(vCURSOR_ID);
LOOP
IF DBMS_SQL.FETCH_ROWS(vCURSOR_ID) = 0 THEN
DBMS_OUTPUT.PUT_LINE(' 추출행 없음');
EXIT;
END IF;
DBMS_SQL.COLUMN_VALUE(vCURSOR_ID, 1, v_a );
DBMS_SQL.COLUMN_VALUE(vCURSOR_ID, 2, v_item_year );
DBMS_SQL.COLUMN_VALUE(vCURSOR_ID, 3, v_mgroup );
v_cnt := v_cnt + 1;
END LOOP;
DBMS_SQL.CLOSE_CURSOR(vCURSOR_ID);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(vCURSOR_ID);
END;
END ina;
/