Tag: 存储过程

Hibernate:如何调用返回varchar的存储函数?

我试图使用Hibernate从Java调用Oracle9i数据库中的遗留存储函数。 该函数声明如下: create or replace FUNCTION Transferlocation_Fix (mnemonic_code IN VARCHAR2) RETURN VARCHAR2 经过几次失败的尝试和广泛的谷歌搜索后,我在Hibernate论坛上发现了这个线程 ,它提出了这样的映射: select Transferlocation_Fix(:mnemonic) as retVal from dual 我执行它的代码是 Query query = session.getNamedQuery(“TransferLocationFix”); query.setParameter(“mnemonic”, “FC3”); String result = (String) query.uniqueResult(); 并且生成的日志是 DEBUG (org.hibernate.jdbc.AbstractBatcher:366) – – about to open PreparedStatement (open PreparedStatements: 0, globally: 0) DEBUG (org.hibernate.SQL:401) – – select Transferlocation_Fix(?) as retVal from […]

EXECUTE之后的事务计数表示BEGIN和COMMIT语句的数量不匹配。 以前的数量

我得到关于提交和回滚的这个例外,但我不确定我的存储过程究竟出了什么问题。 我已经阅读了其他类似问题的答案,但我无法找到确切的提交计数在哪里搞砸了。 所以,这是我使用的存储过程: — this is a procedure used for the purge utility. This procedure uses the parameters of a date and lets user select — if the leads that should be purge must be closed either before, on or since that date. — operator: 0–>less 1–>equal 2–>greater — @closed: closing date — leadscount: returns […]

如何从具有IN和OUT参数的Hibernate调用存储过程

我想从Hibernate调用一个存储过程,它返回一个out值。 这是我的存储过程。 create procedure myProcedure ( in in_Id int, out out_Id int ) begin … END; 我正在尝试这个来调用我的程序 Query query = session.createSQLQuery( “CALL myProcedure(:in_Id)”) .setParameter(“in_id”, 123); //Not sure how to register out parameters…?? List result = query.list(); 我尝试了一切,但没有运气。 你能帮我吗? 如果我尝试以上说法: PROCEDURE myProcedure的参数数量不正确; 预计2,得到1 我试着添加一个out参数 myProcedure(:out_id:in_Id) 但随后它说 并非所有已命名的参数都已设置: 我不知道如何设置参数? 它像下面这样吗? .setParameter(“out_id”, ?); 任何帮助表示赞赏:)

PreparedStatement,CallableStatement和性能注意事项

我有一个需要从我的Java程序调用的oracle stored proc 。 我曾使用CallableStatement将参数传递给存储过程。 我正在使用oracle瘦驱动程序(在Web逻辑服务器中配置相对于相关的jndi条目)。此存储过程没有任何OUT值。 此存储过程接受一个数值,并根据收到的值在数据库中执行大量更新。 我得到一个连接对象,然后在循环中调用此存储过程(20次传递20个数字)。 当我从oracle客户端直接调用此存储过程时,执行将在2-3秒内完成。 但是我的java代码无法预测这种行为。 有些呼叫甚至需要30-40秒才能完成。 我尝试使用PreparedStatement而不是CallableStatement并且可以看到边际性能改进(尽管行为仍然不一致)。 在我的情况下是否可以使用PreparedStatement而不是CallableStatement ,因为storedproc没有任何OUT参数? 是否有任何理由为什么PreparedStatement比CallableStatement有一些性能提升或者我可能观察到的错误? 有没有更好的方法来解决这个性能问题?

是否可以将null参数传递给Java JPA 2.1中的存储过程?

使用新的JPA 2.1 存储过程调用,有没有办法传递null参数? 以下是一个示例用法: StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery(“get_item”, Item.class); storedProcedure.registerStoredProcedureParameter(0, String.class, ParameterMode.IN); storedProcedure.registerStoredProcedureParameter(1, String.class, ParameterMode.IN); storedProcedure.registerStoredProcedureParameter(2, Timestamp.class, ParameterMode.IN); storedProcedure.setParameter(0, a); storedProcedure.setParameter(1, b); storedProcedure.setParameter(2, c); storedProcedure.execute(); 这在给出所有参数时都有效,但是当c为null ,它将因(PostgreSQL)JDBC驱动程序中的错误而失败。 Caused by: org.postgresql.util.PSQLException: No value specified for parameter 2 at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:216) [postgresql-9.3-1101.jdbc41.jar:] at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:244) [postgresql-9.3-1101.jdbc41.jar:] at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:559) [postgresql-9.3-1101.jdbc41.jar:] at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417) [postgresql-9.3-1101.jdbc41.jar:] at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:410) [postgresql-9.3-1101.jdbc41.jar:] at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.execute(WrappedPreparedStatement.java:404) at org.hibernate.result.internal.OutputsImpl.(OutputsImpl.java:69) […]

Java程序中调用Java存储过程

我应该做的是创建一个Java存储过程,然后从Java程序中调用它。 我在执行JAVA程序时遇到问题 – 带有1个参数的JDBCPiemers(下面)(我需要输出String Nosaukums)。 错误:“列名无效”。 调用ORACLE中的过程可以正常工作。 这是我在数据库中加载的存储过程。 import java.sql.*; import java.io.*; public class BeerBeer { public static void getBreweryInfo (int Raz_ID) throws SQLException { String sql = “SELECT Nosaukums FROM Alus_razotaji WHERE ID = ?”;//vaicajums try { Connection conn = DriverManager.getConnection(“jdbc:default:connection:”); // Izveidojam savienojumu ar datubāzi PreparedStatement apstmt = conn.prepareStatement(sql); apstmt.setInt(1, Raz_ID); ResultSet rset […]

使用具有自定义对象的Oracle存储过程中的Spring jdbc返回List

我在Oracle中创建了一个自定义表,如下所示,我的存储过程在使用测试数据独立测试时返回列表。 create or replace TYPE NAMELIST AS TABLE OF VARCHAR2(20); 但是当我尝试使用Java spring调用此存储过程时,我无法返回List 。 declareParameter(new SqlOutParameter(‘l_out’, OracleTypes.ARRAY, ‘NAMELIST’, new SqlReturnArray())); 我们如何在java中从Oracle返回自定义列表?

Hibernate:在存储过程命名查询中映射自定义列名

我目前有以下命名查询包装存储过程: – { call some_sp :param } 列name_first和name_last是存储过程返回的确切列名。 我创建了一个包含相同列名的bean,以便我可以将查询结果映射到该bean。 public class MyBean { private String name_first; private String name_last; … } 调用命名查询并将结果映射到bean的Hibernate代码: – MyBean myBean = (MyBean) sessionFactory.getCurrentSession() .getNamedQuery(“mySp”) .setParameter(“param”, param) .setResultTransformer(Transformers.aliasToBean(MyBean.class)) .uniqueResult(); 所有这些工作都很好,但我没有依赖存储过程中的列名,而是想在MyBean使用我自己的列名,例如: – public class MyBean { private String firstName; // instead of name_first private String lastName; // instead of name_last … } […]

无法从mybatis执行的oracle过程中接收参数

我使用Spring 3.0.5开发java应用程序,并使用mybatis-spring使用数据库Oracle。 我有一个mybatis界面: public interface SubscriberMapper { Subscriber getSubscriberByMsisdn(String msisdn); void insertSubscriber(Subscriber subscriber); void updateSubscriber(Subscriber subscriber); void canCustomerSubscribe(@Param(“msisdn”) String msisdn, @Param(“responseCode”) Integer responseCode); } canCustomerSubscribe的mybatis xml内容: CALL wallet.pkg_wallet_validation.can_customer_subscribe(#{msisdn}, #{responseCode}) 和要执行的代码: public void subscribe(String msisdn) throws InvalidArgumentException { Integer responseCode = 0; subscriberMapper.canCustomerSubscribe(msisdn, responseCode); System.out.println(“msisdn: ” + msisdn + “, responseCode: ” + responseCode); } 当我用无效的“msisdn”执行“subscribe”方法时,我没有收到来自程序的实际值。 […]

如何在JDBC中调用存储过程

对于家庭作业,我必须创建一个pl / sql存储过程来将一个facutly成员添加到数据库 CREATE OR REPLACE PROCEDURE ADDFACULTYDEPTSAL (facid IN NUMBER, facname IN VARCHAR, depID IN NUMBER) AS sal NUMBER; BEGIN CALCSALDEPT(depID, sal); IF sal >= 50000 THEN sal := sal*.9; ELSE IF sal >= 30000 THEN sal := sal*.8; END IF; END IF; INSERT INTO FACULTY(fid, fname, deptid, salary) VALUES(facid, facname, depID, sal); END […]