繁体   English   中英

从 Java 调用 Oracle 函数时出错

[英]Error calling an Oracle function from Java

我正在尝试使用 Java 调用 Oracle 函数,但出现以下错误:

java.sql.SQLException: ORA-06550: line 1, column 13:
PLS-00306: wrong number or types of arguments in call to 'FUNCION'
ORA-06550: line 1, column 13:
PLS-00306: wrong number or types of arguments in call to 'FUNCION'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

这是我用来调用该函数的方式:

String ejecucion = "{ ?=call function(?,?,?,?,?,?,?,?,?) }";

CallableStatement cons = c.ejecutarProcedimiento(ejecucion, 0);  // Here I invoke "prepareCall" method
double monto = 0;

cons.registerOutParameter(1, java.sql.Types.FLOAT);

// Parametro del procedimiento almacenado
cons.setFloat(2, 2);
cons.setDouble(3, importe);
cons.setDate(4,TareasGenerales.convertirFecha(Parametros.cabezal.getFechaVencimientoPresentacion()));                                                                                 
 cons.setDate(5,TareasGenerales.convertirFecha(Parametros.cabezal.getFechaVencmientoPago()));
cons.setDate(6, TareasGenerales.convertirFecha(Parametros.fechaActual));
cons.setDate(7, TareasGenerales.convertirFecha(Parametros.fechaActual));
cons.setBoolean(8, false);
cons.setInt(9, Integer.valueOf(Parametros.cabezal.getAnioMesDesde()));
cons.setBoolean(10, false);

cons.executeQuery();

当我执行最后一行时,出现错误。

难道我做错了什么?

提前致谢。

更新:

 declare
 -- Boolean parameters are translated from/to integers: 
 -- 0/1/null <--> false/true/null 
  pa_a boolean := sys.diutil.int_to_bool(:a);
  pa_b boolean := sys.diutil.int_to_bool(:b);
begin
  -- Call the function
  :result := function(c=> :c,
                                           d => :d,
                                           e => :e,
                                           f => :f,
                                           g => :g,
                                           h => :g,
                                           i => i,
                                           j => :j,
                                           k => k);
end;

我添加了 Oracle 函数定义。

上传 2.0:

FUNCTION Prueba(tipo_calc           IN NUMBER,
                        impte           IN NUMBER,
                        f_venc         IN DATE,
                        f_venc_p         DATE,
                        f_pre          IN DATE,
                        f_pa            IN DATE,
                        pa_tiene IN BOOLEAN,
                        pa_anio         IN NUMBER,
                        pa_buen     IN BOOLEAN) RETURN NUMBER; 

错误信息很明确:

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

检查数据库中有多少参数具有该功能。

最后我解决了这个问题,直接在字符串“ejecucion”中传递我的参数,而不是在后面添加它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM