ORA-01460: 未实现或请求的转换不合理

ORA-01460 unimplemented or unreasonable conversion requested

我正在 oracle proc 中传递 ID。 ID 可以是 1000 的。目前它能够处理大约 600 个 ID,如果我传递超过 600 个 ID - 我收到 ORA-01460 未实现或不合理的转换请求。 ID 是 varchar2 数据类型,我如何处理 varchar2 中的 1000 个 ID,或者什么是处理此类问题的最佳策略。任何 guidance/suggestion 将不胜感激。这可以使用 CLOB 数据类型解决吗?

//this is how I am processing Id's

create or replace procedure Emp(
emp_id in varchar2
)

//passing those id's in CTE before passing to subquery

WITH
EMP_LIST AS(
select regexp_substr(emp_id,'[^,]+', 1, level) from dual
  connect by level <= LENGTH(regexp_substr(emp_id, '[^,]+'))+1
  )

传递集合或 VARRAY 而不是传递逗号分隔的字符串:

CREATE TYPE number_list IS TABLE OF NUMBER(10,0);

然后你可以像这样使用它:

CREATE PROCEDURE emp(
  emp_ids IN number_list
)
IS
BEGIN
  -- Do something with the ids like inserting them into a table
  INSERT INTO employees ( id )
  SELECT COLUMN_VALUE
  FROM   TABLE( emp_ids );

  -- Or something like this:
  SELECT something
  INTO   some_variable  -- you need to define this variable first
  FROM   some_table
  WHERE  emp_id MEMBER OF emp_ids;
END;
/

更新

如果您无法创建任何东西,那么您可以使用内置集合,例如 SYS.ODCINUMBERLIST:

CREATE PROCEDURE emp(
  emp_ids IN SYS.ODCINUMBERLIST
)
IS
BEGIN
  -- Do something with the ids like inserting them into a table
  INSERT INTO employees ( id )
  SELECT COLUMN_VALUE
  FROM   TABLE( emp_ids );

  -- Or something like this:
  SELECT something
  INTO   some_variable  -- you need to define this variable first
  FROM   some_table
  WHERE  emp_id IN ( SELECT COLUMN_VALUE FROM TABLE( emp_ids ) );
END;
/

(注意:SYS.ODCI*LIST 类型是 VARRAY 数据类型,不支持像集合那样的 MEMBER OF 运算符;相反,您可以从VARRAY 使用带有 TABLE() 集合表达式的嵌套 SELECT 语句。)

但是,如果您真的无法 CREATE 任何事情,那么您将无法 CREATE PROCEDURE ....除了与您的 DBA 交谈之外,不确定是否有任何解决方案.