【问题标题】:calling stored function in hibernate在休眠中调用存储的函数
【发布时间】:2015-06-12 10:02:43
【问题描述】:

我试图在休眠中调用一个存储函数,但我得到了无效的 sql 异常。

Java 代码---

public Integer callSqlBlock(){
        Integer outputValue =1;
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        session.doWork(new Work() {
                                        @Override
                                        public void execute(Connection conn)
                                                throws SQLException {
                                              CallableStatement stmt = conn.prepareCall("? = call test(?)");
                                              stmt.registerOutParameter(1, Types.INTEGER);
                                              stmt.setString(2, "callIndex");
                                              stmt.execute();
                                              Integer output = stmt.getInt(1);
                                              test(output);

                                           }
                        });
        Connection oracleConnection = getJavaSqlConnectionFromHibernateSession(session);
       // CallableStatement statement = oracleConnection.prepareCall(sql)

        return outputValue;
}

在oracle中测试存储函数---

create or replace 
function test( str in varchar2) return number
as 
begin
if str = 'test' then
 return 1;
end if;
return 0;
end;

请告诉我哪里出错了

【问题讨论】:

    标签: spring oracle hibernate


    【解决方案1】:

    您可以通过将call 括在大括号中来更改prepareCall 行以使用JDBC 转义语法,如

    CallableStatement stmt = conn.prepareCall("{? = call test(?)}");
    

    也可以在调用中使用 PL/SQL 块,例如

    CallableStatement stmt = conn.prepareCall("begin ? := test(?); end;");
    

    JDBC 语法更具可移植性,PL/SQL 块可能要快得多。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      相关资源
      最近更新 更多