从Java调用SQL函数并设置参数[重复]

Posted

技术标签:

【中文标题】从Java调用SQL函数并设置参数[重复]【英文标题】:Calling SQL function from Java and setting parameters [duplicate] 【发布时间】:2020-09-02 10:32:12 【问题描述】:

我试图从我的 Java 代码中调用一个 SQL 函数,但我没有运气。我知道我需要使用 Callable Statement 来调用 SQL 函数,但我不确定该函数会产生什么值,因为我是 SQL 新手,而且我很难理解 SQL 函数。 下面是我的 SQL 函数。

SQL函数:

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;

【问题讨论】:

这个论坛上也有人问过同样的问题。我相信这会解决你的问题。***.com/questions/13158212/… 【参考方案1】:

你可以试试这样的:

public String callPlsql(String a,String b, String c) throws Exception 
                String res=null;
                CallableStatement cstmt = null;
                Connection con=null;
                try 
                con = getConn(); //define this to get your connection 
                cstmt = con.prepareCall("? = call FXRATE_ENTITY(?,?,?)");
                cstmt.registerOutParameter(1, java.sql.Types.NUMERIC);
                cstmt.setString(2, a);
                cstmt.setString(3, b);
                cstmt.setString(4, c);
                cstmt.execute();
                res = cstmt.getString(1);
                //con.commit();
                
                catch(Exception e)
                   con.rollback();
                   e.printStackTrace();
                   throw e;
                
                finally 
                  cstmt.close();
               
  

【讨论】:

以上是关于从Java调用SQL函数并设置参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用JDBC从Java调用Oracle SQL中的存储过程的示例

java布尔值在被调用方法中没有改变[重复]

“构造函数调用必须是构造函数中的第一个语句”Java中的问题[重复]

如何在java中调用不带参数的PL/SQL函数

如何从java调用C#函数[重复]

java调用oracle存储过程 关于sql里面in函数参数的问题