通过hibernate

时间:2018-03-29 11:49:35

标签: oracle hibernate

所以我有一个像function unbind (ids in id_table)这样的oracle功能。它需要一组id来对我的数据库执行一些更新。

问题是我如何运行我的功能才能执行更新操作? 我已经尝试过的尝试:

1. Query query = getSession().createSQLQuery("call UNBIND(:ids)"); query.setParameter("ids", myIds); query.executeUpdate();

但我得到的ora-06576不是有效的功能或程序名称

  1. Query query = getSession().createSQLQuery("execute UNBIND(:ids)"); query.setParameter("ids", myIds); query.executeUpdate();
  2. 用ora-00900完成无效的sql语句

    1. Long [] myArray = movedIds.toArray(new Long[movedIds.size()]); Boolean result = getSession().doReturningWork(new ReturningWork<Boolean>() { @Override public Boolean execute(Connection connection) throws SQLException { CallableStatement callableStatement = connection.prepareCall("{ ? = call UNBIND(:ids)"); callableStatement.registerOutParameter(1, Types.INTEGER); callableStatement.setArray(2, connection.createArrayOf("id_table", myArray)); callableStatement.execute(); return !(callableStatement.getInt(1) == 0); } });
    2. 使用java.sql.sqlfeaturenotsupportedexception不支持的功能

      完成

      应用程序通过jboss与数据库连接,所以我想这可能是p中的问题。 3?

      1. SELECT UNBIND( id_table (6271789) ) FROM DUAL 不起作用,因为我的功能执行更新......
      2. 无论如何还有其他方法来运行一个函数,它直接从java代码中将数组作为参数?

1 个答案:

答案 0 :(得分:0)

这是一个简单的例子,这有帮助吗?

import java.sql.*;


public class Class1 {

    public static void main(String[] args) throws SQLException {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  

        Connection conn = null;
        try {
            conn = DriverManager.getConnection(  
                    "jdbc:oracle:thin:@//localhost/orcl","scott","tiger");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  

        String query =  "{ ? = call test_func(?) }";
        CallableStatement cs = null;
        try {
            cs = conn.prepareCall(query);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        int inVal = 0;

        cs.setInt(2, inVal);

        cs.registerOutParameter(1, oracle.jdbc.OracleTypes.NUMBER);

        cs.executeUpdate();

        int res = cs.getInt(1);

        System.out.println("result is " + res);
    }

}