2

我有一个函数,它将一个 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 错误:“无法访问来自非嵌套表项的行”< /p>

我发现我可以使用以下方法避免此错误:

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

但现在我限制为最大 4000 字节,这还不够……如何恢复完整的 32767 字节范围?

4

1 回答 1

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

这可能会解决目的。

于 2013-01-16T05:42:26.817 回答