当前位置: 首页 > 知识库问答 >
问题:

JPA PLS-00306:调用“STP_REFRESH_CATEGORY_GUARANTEE”的参数数量或类型错误

金理
2023-03-14

我正在使用JPA调用oracle存储过程并获得下面提到的异常

[4/24/14 9:07:37:583 EDT] 00000031 SystemOut O [EL Warning]: 2014-04-24 09:07:37.452--UnitOfWork(1697919964)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'STP_REFRESH_CATEGORY_GUARANTEE'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

Error Code: 6550
Call: BEGIN STP_REFRESH_CATEGORY_GUARANTEE(SHIP_CODE=>?, SAIL_DATE=>?, return_code=>?); END;
    bind => [3 parameters bound]
Query: DataReadQuery(name="refreshCategoryGuarantee" )
[4/24/14 9:07:37:584 EDT] 00000031 SystemOut                                                    O         **********************************************************************************
[4/24/14 9:07:37:584 EDT] 00000031 SystemOut                                                    O EXCEPTION: Exception       [EclipseLink-4002] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'STP_REFRESH_CATEGORY_GUARANTEE'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

Error Code: 6550
Call: BEGIN STP_REFRESH_CATEGORY_GUARANTEE(SHIP_CODE=>?, SAIL_DATE=>?, return_code=>?); END;
    bind => [3 parameters bound]
Query: DataReadQuery(name="refreshCategoryGuarantee" ) ship_code: AL sail_date: 01-JUN-14

    try{
                Query query = getEntityManager().createNamedQuery("refreshCategoryGuarantee");
                query.setParameter("SHIP_CODE", ship_code);
                query.setParameter("SAIL_DATE", DateUtil.getSqlDate(sailDate));
                return (Integer) query.getSingleResult();
            }catch(Exception ex){
                System.out.println("**********************************************************************************");
                logger.error("Error executing refreshCategoryGuarantee named query with param["+ship_code+","+sailDate+"] ", ex);
                return StoredProcedureConstants.RETURN_CODE_EXCEPTION;
           }
    
Here, refreshCategoryGuarantee is named query of STP_REFRESH_CATEGORY_GUARANTEE procedures.

-------------
<pre>
@NamedStoredProcedureQuery(  
        name="refreshCategoryGuarantee",  
        procedureName="STP_REFRESH_CATEGORY_GUARANTEE",  
        returnsResultSet=false,  
        parameters={  
            @StoredProcedureParameter(queryParameter="SHIP_CODE", type=String.class),  
            @StoredProcedureParameter(queryParameter="SAIL_DATE", type=Date.class),  
            @StoredProcedureParameter(queryParameter="return_code", direction=Direction.OUT, type=Integer.class) 
        })

我的问题是,当我在oracle中执行下面提到的匿名块时,它的工作没有任何问题

    SET serveroutput ON
    DECLARE
      rc NUMBER;
    BEGIN
      STP_REFRESH_CATEGORY_GUARANTEE('OA','24-jan-15',rc);
      dbms_output.put_line('Response Code :'||rc);
    END; 

我不知道为什么我在JPA调用中得到这个?你能帮我解决它吗?

共有2个答案

陶鹏
2023-03-14

这与获取参数有关。不是通过参数名。

1-获得对EntityManager的访问权限。例如,通过@PeristenceContext私有EntityManager em;

2 -使用数字访问参数。这只是一个例子。

StoredProcedureQuery query = entityManager
.createStoredProcedureQuery("count_comments")
.registerStoredProcedureParameter(
    1,Long.class, ParameterMode.IN
)
.registerStoredProcedureParameter(
    2,Long.class, ParameterMode.OUT
)
.setParameter(1, 1L);
query.execute();
Long commentCount = (Long) query.getOutputParameterValue(2);
云丰
2023-03-14

StoredProcedureParameter定义中的参数SAIL_DATE的类型,是java.util.date吗?它必须是java.sql.date...

@StoredProcedureParameter(queryParameter="SAIL_DATE", type=java.slq.Date.class)
 类似资料:
  • 问题内容: 使用PHP 5.3.2和Oracle 11G,我试图将数组从PHP传递到oracle存储的proc中。这是我的PL / SQL: 查询: 还有我尝试绑定数组并执行的PHP代码: 第一的: 会产生此错误: PLS-00306:调用“ UPSERT_TXA_COMPLIANCE_SLCT”时参数的数量或类型错误 我显然传递了1个参数。那么,这是什么问题/如何解决类型问题? 另外我发现了这个

  • 我试图理解为什么当我在MyModel中为T使用更高类型的参数时,以下代码无法编译 但是如果我把它改成< code > new Bar[my model[Any]]它就会编译。这是为什么呢?

  • 我使用等代码从weather API获取数据,但遇到了两个错误: 因此,我在此网站上搜索类似的错误,并在https://stackoverflow.com/a/35053689/13899010找到了部分解决方案,我使用这个解决方案是因为我不想使用资源字符串来更改显示的数据。将此添加到string.xml中:然后将代码更改为: 现在,我得到了以下错误。我在string.format()中看到And

  • 我正在尝试从Firebase Fi还原中列出项目列表(已经完成),并从Firebase云存储中为每个项目获取不同的图像URL。 我使用一个名为getPhotoUrl的函数来更改变量photoUrl的值。问题是返回是在getPhotoUrl之前执行的。如果我在函数getPhotoUrl和async前面加上_docs.map((文档),我得到一个错误,说参数类型列表 我的代码:

  • 这是我运行时得到的结果。我使用的是ionic4版本的Angular 8。

  • 我试图模拟对resttemplate.exchange()的调用,但无法使其工作。当前,对exchange()的调用挂起,所以我认为正在调用的是实际的方法,而不是我的模拟方法。对exchange()的调用如下: