在执行存储过程时调用异常时获取错误的参数数量或类型

时间:2013-12-16 10:41:48

标签: java sql oracle stored-procedures

我在oracle中创建了下面的存储过程。

CREATE OR REPLACE PROCEDURE "UPDATE_ASSET_LOB_PROC"(
asset_id IN integer,
distribution_id_list IN distribution_id)

IS
CURSOR dist_id
IS
select adt.lkp_dist_type from Asset_Dist_Type adt where adt.asset_id= asset_id;

BEGIN

  delete  from Asset_Dist_Type where asset_id= asset_id;
  commit;
  for i IN dist_id 
  LOOP
  insert into Asset_Dist_Type values (asset_id_list,i.lkp_dist_type);
  commit;
  END LOOP;

END UPDATE_ASSET_LOB_PROC;

distribution_is是一种自定义类型。我已将其创建为

`CREATE TYPE distribution_id AS TABLE OF NUMBER;`

我的java代码如下。

Integer[] idArray = new Integer[selectedDistributionTypes.size()]; 
        idArray = selectedDistributionTypes.toArray(idArray); 

    entityManager.createNativeQuery("CALL UPDATE_ASSET_LOB_PROC (:assetIdParam,:distributionIdParam)")
                    .setParameter("assetIdParam", assetId).setParameter("distributionIdParam", idArray).executeUpdate();

我正在

`Caused by: java.sql.SQLException: ORA-06553: PLS-306: wrong number or types of arguments in call to 'UPDATE_ASSET_LOB_PROC'`.

这里有什么不对的?我想这是存储过程。但我对编写存储过程并不多。或者是否可以传递逗号分隔列表并将其拆分为存储过程?

1 个答案:

答案 0 :(得分:0)

解决了这个问题。我删除了创建的自定义类型“分发ID”,并将distribution_id_list设置为varchar2。从bean开始,我发送了一个以逗号分隔的列表,并在存储过程中删除了逗号循环,如下所示。

SELECT REGEXP_SUBSTR (distribution_id_list, '[^,]+', 1,LEVEL) dist_id
                             FROM DUAL
                             CONNECT BY REGEXP_SUBSTR (distribution_id_list, '[^,]+', 1, LEVEL) IS NOT NULL

在for循环中,我可以将dist_id用于我想要的任何操作。