2012-11-26 1 views
2

나는 숫자의 테이블 :에 CSV 목록을 분할하는 기능을 가지고 SYC_IDNRTABLE과 같이 선언ORA-22905 매개 변수화 된 쿼리에

create or replace function SYC_SplitIds (IDList in varchar2) return SYC_IDNRTABLE pipelined ...

:

SYC_IDNRTable as table of spectrum.SYC_IDNR;

및 SYC_IDNR은 다음과 같습니다.

type SYC_IDNr as object(IDNr Integer)

함수 자체가 올바르게 작동합니다. 적어도이 같은 쿼리 확인을 작동합니다 그러나

INSERT INTO TEST_TEMP_IDS SELECT IDNr AS ID FROM Table(SYC_SplitIDs ('1234,5678'));

내가 대신 고정 된 문자열의 매개 변수와 같은 쿼리를 시도하는 경우 : IDLIST는 VARCHAR2로 선언

INSERT INTO TEST_TEMP_IDS 
SELECT IDNr AS ID 
FROM Table(SYC_SplitIDs (:IDLIST)); 

(32767) 같은 "1234,5678"문자열로 초기화하면 이상한 ORA-22905 오류가 발생합니다. "중첩되지 않은 테이블 항목에서 행에 액세스 할 수 없습니다."

피할 수있는 것으로 나타났습니다. 이 오류를 사용하여 :

INSERT INTO TEST_TEMP_IDS SELECT IDNr AS ID 
    FROM Table(SYC_SplitIDs (CAST(:IDLIST AS VARCHAR(4000))); 

그러나 이제는 최대 4000 바이트로 제한됩니다. 전체 32767 바이트 범위를 다시 얻으려면 어떻게해야합니까?

답변

0
INSERT INTO TEST_TEMP_IDS SELECT IDNr AS ID FROM Table(SYC_SplitIDs (CAST(:IDLIST AS VARCHAR(4000))); 

그러나 이제는 최대 4000 바이트로 제한했습니다. 전체 32767 바이트 범위를 다시 얻으려면 어떻게해야합니까?

아마 당신은 목적을 해결할 수 "(CAST(:IDLIST AS VARCHAR(MAX)));"

이 사용해 볼 수 있습니다.

관련 문제