前段时间我在使用 Quarkus 从 Oracle 执行存储过程时遇到了一些问题,我不确定,但我认为这是一个与您类似的错误。
我在“registerStoredProcedureParameter”方法上设置了错误的类型。
我将在这里放置执行两个不同存储过程的示例代码,希望对您有所帮助。
第一个例子
存储过程
create or replace package proc_cliecoh_v2 is procedure execconh (v_param char);
SQL 命令执行这个存储过程
CALL PROC_CLIECOH_V2.EXECCONH( 'S' );
Java 类
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.ParameterMode;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import javax.persistence.StoredProcedureQuery;
import javax.persistence.TypedQuery;
import javax.transaction.Transactional;
@ApplicationScoped
public class MyExampleClass {
@Inject
EntityManager em;
@Transactional
public boolean firstExample() throws PersistenceException {
StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("PROC_CLIECOH_V2.EXECCONH");
storedProcedure.registerStoredProcedureParameter("v_param", String.class, ParameterMode.IN);
storedProcedure.setParameter("v_param", "S");
return storedProcedure.execute();
}
}
第二个例子
存储过程
create or replace package proc_impclih_v2 is
procedure execimph ( cd_empresa number, cd_usuario number, tp_ocorrencia char, cd_cliente_padrao number);
end proc_impclih;
SQL 命令执行这个存储过程
CALL PROC_IMPCLIH_V2.EXECIMPH( 123 , 1 , 'I' , 456 );
Java 类
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.ParameterMode;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import javax.persistence.StoredProcedureQuery;
import javax.persistence.TypedQuery;
import javax.transaction.Transactional;
@ApplicationScoped
public class MyExampleClass {
@Inject
EntityManager em;
@Transactional
public boolean secondExample() throws PersistenceException {
StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("PROC_IMPCLIH_V2.EXECIMPH");
storedProcedure.registerStoredProcedureParameter("cd_empresa", Integer.class, ParameterMode.IN);
storedProcedure.registerStoredProcedureParameter("cd_usuario", Integer.class, ParameterMode.IN);
storedProcedure.registerStoredProcedureParameter("tp_ocorrencia", String.class, ParameterMode.IN);
storedProcedure.registerStoredProcedureParameter("cd_cliente_padrao", Integer.class, ParameterMode.IN);
storedProcedure.setParameter("cd_empresa", 123);
storedProcedure.setParameter("cd_usuario", 1);
storedProcedure.setParameter("tp_ocorrencia", "I");
storedProcedure.setParameter("cd_cliente_padrao", 456);
return storedProcedure.execute();
}
}