如何从java调用oracle函数
如何从java调用oracle函数 我有一个甲骨文函数aaa.function(数字、日期);,此方法返回true或false。如何从java调用它并获取返回值 我正在使用如何从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();
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)