Tag: 存储过程

在PLSQL Oracle中抛出特定的错误消息…在hibernate中捕获?

是否可以在PL / SQL oracle存储过程中抛出特定的错误消息,并在调用时在Hibernate中捕获它?

将ARRAY传递给存储过程时出现死锁

在将ARRAY发送到stord proc时,我们正在获得java级死锁。 我正在附加线程转储。 Found one Java-level deadlock: ============================= “http-bio-8080-exec-11”: waiting to lock monitor 0x00000000406fb2d8 (object 0x00000000fea1b130, a oracle.jdbc.driver.T4CConnection), which is held by “http-bio-8080-exec-4” “http-bio-8080-exec-4”: waiting to lock monitor 0x00000000407d6038 (object 0x00000000fe78b680, a oracle.jdbc.driver.T4CConnection), which is held by “http-bio-8080-exec-11” Java stack information for the threads listed above: =================================================== “http-bio-8080-exec-11”: at oracle.sql.TypeDescriptor.getName(TypeDescriptor.java:682) – waiting to lock (a […]

将对象从Java传递到Oracle过程

要将数组传递给oracle过程,我们使用ArrayDiscriptor和ARRAY对象。 我必须使用哪些对象将对象传递给存储过程?

在Oracle JDBC中是否可以批量存储过程调用并检索OUT参数?

我在Oracle 11g数据库中有一个存储过程,如f(a IN,b IN,c OUT)。 我想在批处理模式下从JDBC调用它,然后读取所有OUT变量。 这可能吗? 到目前为止我有这个 CallableStatement statement = connection.prepareCall(“f(?, ?, ?)”); for(Item i : items) { int i = 0; statement.setString(++i, item.getA()); statement.setString(++i, item.getB()); statement.registerOutParameter(++i, Types.NUMERIC); statement.addBatch(); } statement.executeBatch(); int[] answers = ? 谢谢

neo4j 3.0中的存储过程

我在Windows上使用neo4j 3.0,我尝试使用存储过程的新function。 我从github源代码构建了apoc.jar。 这个jar被复制到插件库( C:\ Program Files \ Neo4j Community \ plugins ) 当我尝试从neo4j浏览器调用任何apoc存储过程时,我收到Neo.ClientError.Procedure.ProcedureNotFound错误。 我试着按照这篇文章 ,但dbms配置参数对我不起作用…

SimpleJdbcCall忽略JdbcTemplate获取大小

我们通过Spring SimpleJdbcCall调用pl / sql存储过程,SimpleJdbcCall忽略了JdbcTemplate上的fetchsize设置。 尽管我们已将jdbctemplate fetchsize设置为200,但rowmapper结果集获取大小设置为10.请知道为什么会发生这种情况以及如何解决它? 在下面的代码片段中的rowmapper中打印了结果集的fetchsize – 一旦它是200而其他时间它是10,即使我在两个occassion上都使用相同的JdbcTemplate。 通过jdbctemplate直接执行会在行映射器中返回200的fetchsize jdbcTemplate = new JdbcTemplate(ds); jdbcTemplate.setResultsMapCaseInsensitive(true); jdbcTemplate.setFetchSize(200); List temp = jdbcTemplate.query(“select 1 from dual”, new ParameterizedRowMapper() { public Object mapRow(ResultSet resultSet, int i) throws SQLException { System.out.println(“Direct template : ” + resultSet.getFetchSize()); return new String(resultSet.getString(1)); } }); 通过SimpleJdbcCall执行此操作始终在rowmapper中返回10的fetchsize jdbcCall = new SimpleJdbcCall(jdbcTemplate).withSchemaName(schemaName) .withCatalogName(catalogName).withProcedureName(functionName); jdbcCall.returningResultSet((String) outItValues.next(), new […]

JDBC连接的语法prepareCall SQL

我正在为Connection#prepareCall阅读JavaDocs : sql – 可能包含一个或多个’?’的SQL语句 参数占位符。 通常,此语句是使用JDBC调用转义语法指定的。 根据这个流行的mkyong JDBC教程 ,我看到执行的方法如下: String insertStoreProc = “{call insertDBUSER(?,?,?,?)}”; callableStatement = dbConnection.prepareCall(insertStoreProc); 我想知道: 为什么字符串封装在大括号( { … } )中? 为什么call继续执行程序的名称? 最重要的是 : { call }是否是在所有JDBC驱动程序中执行所有存储过程的正确语法? 或者是{ call … }特定于特定类型的驱动程序? 这个过程调用语法有变化吗? 例如,是否存在可以将”{ execute }”传递到prepareCall方法的场景/驱动程序? 有没有关于这方面的文件? 更新: 根据CallableStatement ,JDBC提供了两种有效的语法,用于在所有驱动程序中以标准方式调用proc: {?= call [(,, …)]} 和: {call [(,, …)]} 但目前还不清楚何时使用(即:什么时候预先call ?= )。

CallableStatement vs Statement

当调用没有参数的存储过程而没有输出时,使用CallableStatement比使用常规Statement或PreparedStatement有什么好处?

带有OUT参数的Java MyBatis存储过程调用

第一个问题:我试图返回一个OUT参数而不是带注释的结果集。 首先,它甚至可能吗? 如果是的话,怎么会这样呢? MyBatis:3.0.6 数据库:SQL Server 2008 以下是UserDAO中我的方法调用语法的示例: @Select(value= “{ CALL saveUser( ” + “#{userId, mode=IN, jdbcType=INTEGER},” + “#{firstname, mode=IN, jdbcType=VARCHAR},” + “#{lastname, mode=IN, jdbcType=VARCHAR},” + “#{message, mode=OUT, jdbcType=VARCHAR}” + “)}”) @Options(statementType=StatementType.CALLABLE) public String saveUser( @Param(“userId”) int userId, @Param(“firstname”) String firstname, @Param(“lastname”) String lastname); 我从所有“保存”程序返回一条消息,因此我可以向用户返回响应:“用户保存成功”,“保存用户时出错”,“您无权保存此用户”等。我知道返回结果集将解决问题,只是我不想改变我的所有程序! 第二个问题:是否可以返回从多个OUT参数填充的“SaveProcedureResponse”? 例如: @Select(value= “{ CALL saveUser( ” + “#{userId, mode=IN, […]

Postgres触发更新Java缓存

我有一个Java Web应用程序(部署到Tomcat的WAR),它在内存中保留缓存( Map )。 我有一个Postgres数据库,其中包含一个widgets表: widget_id | widget_name | widget_value (INT) (VARCHAR 50) (INT) 对于Widget POJO和widgets表记录之间的O / R映射,我正在使用MyBatis。 我想实现一个解决方案,只要widgets表中的值发生更改,Java缓存(Map)就会实时更新。 我可以有一个轮询组件,每隔30秒检查一次表,但轮询只是不适合这里的解决方案。 所以这就是我的建议: 编写一个调用存储过程的Postgres触发器( run_cache_updater() ) 该过程run_cache_updater.sh运行shell脚本( run_cache_updater.sh ) 脚本base-64对已更改的widgets记录进行编码,然后将编码记录cURL到HTTP URL Java WAR有一个servlet侦听cURLed URL并处理发送给它的任何HttpServletRequests 。 它base-64解码记录并以某种方式将其转换为Widget POJO。 缓存( Map )使用正确的键/值进行更新。 这个解决方案感觉很尴尬,所以我首先想知道那里的Java / Postgres大师会如何处理这种情况。 在这里轮询更好/更简单的选择(我只是顽固吗?)我还有其他/更好/更标准的解决方案吗? 如果没有,并且此解决方案是将已更改的记录从Postgres推送到应用程序层的标准方法,那么我就会扼杀如何编写触发器,存储过程和shell脚本,以便将整个widgets记录传递到cURL声明。 在此提前感谢您的帮助。