参数化查询中的ORA-22905

时间:2012-11-26 11:58:35

标签: parameter-passing oracle9i

我有一个功能,它将CSV列表拆分为数字表。:

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

其中SYC_IDNRTABLE声明为:

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'));

但是,如果我使用参数而不是固定字符串尝试相同的查询:

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

其中IDLIST被声明为VARCHAR2(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字节范围?

1 个答案:

答案 0 :(得分: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)));"

这可能会解决目的。