Java中的Oracle函数
我试图从Java代码中调用Oracle函数,如下所示:Java中的Oracle函数,java,oracle,jdbc,Java,Oracle,Jdbc,我试图从Java代码中调用Oracle函数,如下所示: Java CallableStatement cstmt = p_con.prepareCall("{? = CALL FXRATE_ENTITY(?, ?, ?, ?, ?)}"); cstmt.registerOutParameter(1, java.sql.Types.INTEGER); cstmt.setString(2, "SCR");
Java
CallableStatement cstmt = p_con.prepareCall("{? = CALL FXRATE_ENTITY(?, ?, ?, ?, ?)}");
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setString(2, "SCR");
cstmt.setString(3,l_srccur);
cstmt.setString(4, l_tfcurr);
cstmt.setString(5, "B001");
cstmt.execute();
String res = cstmt.getString(1);
但我有个例外
java.sql.SQLException:索引::6处缺少IN或OUT参数
我不确定我做错了什么。这也是我试图调用的函数
Oracle功能
FUNCTION FXRATE_ENTITY(CODCURRBASE IN VARCHAR, LCODCURRFROM IN VARCHAR, LCODCURRTO IN VARCHAR, LIDENTITY IN VARCHAR)
RETURN NUMBER IS
CODCUR_L VARCHAR2(3);
BEGIN
IF (LCODCURRTO = '*') THEN
RETURN NVL(FXRATE(CODCURRBASE, LCODCURRFROM, CODCURRBASE, LIDENTITY),
0);
ELSE
RETURN NVL(FXRATE(CODCURRBASE, LCODCURRFROM, LCODCURRTO, LIDENTITY), 0);
END IF;
END;
如有任何帮助或建议,将不胜感激。提前感谢。您在prepare call语句中有一个额外的?
,它不是必需的,因为第一个参数被视为返回参数,因此我们需要使用registerOutParameter
注册out参数
将语句更改为下面,它应该会起作用
CallableStatement cstmt = p_con.prepareCall("{? = CALL FXRATE_ENTITY(?, ?, ?, ?)}");
我很确定准备好的语句不支持任何特定于数据库的sql函数/关键字。您可能需要对这些内容使用本机查询。好的,我删除了额外的?
,但现在我在位置5处得到了格式不正确的SQL92字符串。期待“call”
作为例外。它是独立函数还是包函数?我不确定,但我认为它是一个包函数…我已经复制了确切的场景,它对我有效。你能更新代码吗?还提到了l_srccur
和l_tfcurr
的赋值。最后,您在数据库中看到的函数是否以创建或替换开始?因为在包内调用函数是不同的。l_srccur
和l_tfcurr
属于String
类型。不,它不是以create或replace
开头,而是在包名Function
中,其中还有其他函数。。。