2012-08-16 3 views
0

select count(id) from user where id in ('208018042','208001105')과 같은 테이블을 쿼리해야하므로 세미콜론으로 구분 된 데이터를 받아들이는 함수를 작성했지만 유효하지 않은 숫자가 예외로 표시되고 있습니다. 값을 보내지 않은 것 같습니다.즉시 실행이있는 프로 시저의 문제

FUNCTION p_get_count_id(p_invalue IN VARCHAR2) RETURN VARCHAR2 IS 
      v_splitTable  split_tbl; 
      v_OptionValueList varchar2(4000); 
      v_in_optid_list varchar2(4000); 
      v_count   number; 
    begin 
    v_in_optid_list := p_in_field_value; 
    if (v_in_optid_list is not null) then 
     v_in_optid_list := REPLACE(p_in_field_value, ';', ','); 

EXECUTE IMMEDIATE 'select count(id) 
     from user 
    where id in 
      (' || v_in_optid_list || ')' bulk collect 
     into v_splitTable; 
     v_OptionValueList := joinstr(v_splitTable, '; '); 
    end if; 
    return v_OptionValueList; 
End p_get_count_id; 

가 즉시 실행 문제를 일으키는 : 견적에 잘못 이리와 무엇 '208018042'208001105'위의 단일 쿼리가 실행됩니다하지만 아래의 기능 쿼리 몇 가지 문제가 같은 값을 전달해야 .

+0

execute immediate를 호출하기 전에'v_in_optid_list'의 값을 직접 표시 할 수 있습니까? (예 :'dbms_output.put_line (v_in_optid_list);) – schurik

답변

1

작동하지 않습니다. 콜렉션 또는 파이프 라인 함수 또는 임시 테이블을 사용하여 가능한 값 목록에 함수를 전달하십시오.

+0

쿼리가 number를 반환하지만 콜렉션에 번호를 할당하려합니다. 숫자를 숫자로 가져오고 반환 값을 채운 후에 왜 그 숫자를 얻을 수 없습니까? –

+0

또한 당신이 물어볼 내용을 얻으려면이 기능을 사용할 필요가 없습니다. 당신은 쉼표로 구분 된 문자열을 구문 분석 할 수 SQL에서 매우 간단한 사용하여 연결 절 –

+0

왜 안돼? 컬렉션에는 하나의 값만 포함되며 오류가 아닙니다. – schurik