我是Oracle新手,正在使用Spring和Hibernate。我尝试从Oracle调用存储过程并执行它,但我的日志中出现错误,无法指出SQL查询中的错误位置。此外,不允许我编辑SQL。
程序:
procedure STORED_PROCEDURE
( first in varchar2
, second in varchar2
, third in varchar2
, fourth inout varchar2
, fifth inout varchar2
, sixth in boolean
);
这是访问存储过程的代码。它包含4个IN参数和2个INOUT参数。我将三个变量硬编码到setParameter
片段中(第四、第五和第六个)。错误发生在execute
上。
StoredProcedureQuery query = entityManager.createStoredProcedureQuery("STORED_PROCEDURE")
.registerStoredProcedureParameter("first", String.class, ParameterMode.IN)
.registerStoredProcedureParameter("second", String.class, ParameterMode.IN)
.registerStoredProcedureParameter("third", String.class, ParameterMode.IN)
.registerStoredProcedureParameter("fourth", String.class, ParameterMode.INOUT)
.registerStoredProcedureParameter("fifth", String.class, ParameterMode.INOUT)
.registerStoredProcedureParameter("sixth", Boolean.class, ParameterMode.IN)
.setParameter("first", var1)
.setParameter("second", var2)
.setParameter("third", var3)
.setParameter("fourth", "value")
.setParameter("fifth", "value")
.setParameter("sixth", true);
query.execute();
完整错误:
Caused by: oracle.jdbc.OracleDatabaseException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'STORED_PROCEDURE'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我曾尝试将布尔参数更改为Integer.class
,因为我了解到SQL和布尔值可能存在问题,但没有任何效果。
1条答案
按热度按时间fzsnzjdm1#
在Oracle中,SQL中没有
BOOLEAN
数据类型,但PL/SQL中有BOOLEAN
数据类型。这意味着如果将过程声明为:那么它只能从PL/SQL范围调用,而不能从SQL调用。
您可能希望更改为使用SQL和PL/SQL都支持的数据类型,并将该过程定义为:
然后,在过程内部,您可以将
sixth
从0
/1
值转换为布尔值FALSE
/TRUE
。