Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从java调用oracle函数_Java_Oracle_Function_Return Value - Fatal编程技术网

如何从java调用oracle函数

如何从java调用oracle函数,java,oracle,function,return-value,Java,Oracle,Function,Return Value,如何从java调用oracle函数 我有一个甲骨文函数aaa.function(数字、日期);,此方法返回true或false。如何从java调用它并获取返回值 我正在使用Hibernate 这就是我试过的 Session session = null; String associateHistorySQL=""; try { session = HibernateUtil.currentSession();

如何从java调用oracle函数

我有一个甲骨文函数aaa.function(数字、日期);,此方法返回true或false。如何从java调用它并获取返回值

我正在使用
Hibernate

这就是我试过的

Session session = null;
            String associateHistorySQL="";

            try {
                session = HibernateUtil.currentSession();

                associateHistorySQL = "SELECT aa.myFunction(:aorId,:givenDate) from dual";

                Query associateHistoryQuery = session.createQuery(associateHistorySQL);

                associateHistoryQuery.setParameter("aorId", associateOfficeRecordId);
                associateHistoryQuery.setParameter("givenDate", date);

                List associateHistoryList = associateHistoryQuery.list();

                if (associateHistoryList != null && associateHistoryList.size() > 0 && new Integer(associateHistoryQuery.uniqueResult().toString()) > 0)
                    return true;
                else
                    return false;
            } finally {
                HibernateUtil.cleanUpHibernateFromDao(false);
            }
这是我得到的异常
意外标记:aa:line 1:1:意外标记:aa


谢谢

这样做实际上有多种方法。但最简单的方法是发出一个查询。 下面是如何做到这一点

String sql="select myFunction('"+number+"','"+date"') from dual";
statement.execute(sql);
如果使用JDBC,请设置输入和输出参数

如果您使用的是hibernate,请使用如下命名查询: YourMapping.hbm.xml

<sql-query name="my_function" callable="true">
<return alias="demo" class="net.bean.Demo">
<return-property name="id" column="id"/>
<return-property name="fname" column="fname"/>
<return-property name="lname" column="lname"/>
</return>
    {?=call demoFunc(:param1,:param2)}
</sql-query>

请注意,在hbm.xml文件中,如果函数返回适当的值,则返回类名和属性仅在映射了返回值时才存在。请使用hibernate中的session.doWork

从Oracle文档-

在JDBC程序中,对函数balance的调用可能如下所示:

CallableStatement cstmt = conn.prepareCall("{? = CALL balance(?)}");
cstmt.registerOutParameter(1, Types.FLOAT);
cstmt.setInt(2, acctNo);
cstmt.executeUpdate();
float acctBal = cstmt.getFloat(1);
oracle功能:

FUNCTION ap_ch_get_acct_balances (VAR_PI_MOB_NO_ACCT_NO VARCHAR2,
VAR_REPLY_CODE OUT NUMBER, VAR_EXT_RESPONSE OUT VARCHAR2, VAR_PO_ACC_BAL OUT CHAR,
VAR_PO_ACCT_NO OUT CHAR)  
java调用:

String call = "{ ? = call FCRLIVE.AP_CH_GET_ACCT_BALANCES(?, ?, ?, ?, ?) }"; 

您可以使用CallableStatement

String sql="begin ? := aaaa.fucntion(?,?); end;";
CallableStatement stmt = connection.prepareCall(sql);
stmt.registerOutParameter(1, OracleTypes.BOOLEAN);
stmt.setInt(2, number);
stmt.setTimestamp(3, date);
stmt.execute();
之后,您可以使用以下命令读取返回值:

stmt.getBoolean(1)

SQL查询?您尝试了什么,您遇到了什么问题?您好@ErwinBolwidt,已启动的服务器,将在几分钟后发布stacktrace。@ErwinBolwidt,您现在可以查看编辑吗?更好,但我们需要知道您遇到了什么错误/异常。我们中没有人可以运行这个,因为我们没有您的数据库(在这种情况下这是可以理解的),但这意味着我们无法判断这段代码哪里出错。@ErwinBolwidt更新了我得到的异常,谢谢
String sql="begin ? := aaaa.fucntion(?,?); end;";
CallableStatement stmt = connection.prepareCall(sql);
stmt.registerOutParameter(1, OracleTypes.BOOLEAN);
stmt.setInt(2, number);
stmt.setTimestamp(3, date);
stmt.execute();
stmt.getBoolean(1)