当前位置: 首页 > 知识库问答 >
问题:

Spring->Oracle存储过程调用架构问题

关胜
2023-03-14

作为重构的一部分,我正在尝试将数据库调用更改为使用Spring 4.1.0。释放以处理连接和异常,并允许在函数和类之间传递结果集。

我的MS SQL Server存储过程调用工作正常,但当我尝试执行Oracle存储过程时,收到以下错误消息:

2014-11-13 15:39:35,836 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /EmailServiceLayer/EmailServletClient/springtest/123: 
org.jboss.resteasy.spi.UnhandledException: org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; 
bad SQL grammar [{call SPRING_JDBC_TEMPLATE_TEST()}]; nested exception is java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'SPRING_JDBC_TEMPLATE_TEST' must be declared

我通过编写两个非常简单的写入测试表的存储过程来简化问题:一个接受参数并写入,另一个不接受参数,只写入硬编码值。这些过程位于INV模式中,这是我的数据源配置使用的同一用户。

最终,我尝试在我自己的个人模式上运行它,使用配置为使用我的个人凭据的数据源,它成功了。我有一个管理员授权在INV中执行所有过程,但仍然没有成功。我已经确认我可以使用Spring JdbcTemplate.execute()在INV模式上成功执行简单的内联插入。

我的第一次尝试是将JdbcTemplate与我自己定义的CallableStatementCreator一起使用。然后,我尝试使用SimpleJDBCall,我发现它在我的个人模式中起到了作用。这两种方法在INV架构上给出相同的错误消息。以下是我最近一次尝试的代码:

SimpleJdbcCall caller = new SimpleJdbcCall(alex3InvTemplate).withProcedureName("spring_jdbc_template_test");
MapSqlParameterSource paramMap = new MapSqlParameterSource();
paramMap.addValue("p_testval", testval);
Map<String, Object> result = caller.execute(paramMap);

还有我的测试程序:

create or replace
procedure                 spring_jdbc_template_test 
(
  p_testval IN number
)
as
begin

    insert into jdbc_template_test_table values(p_testval);
    commit;

end;

我的应用程序正在Wildfly 8.0.0上运行。最终服务器。除了用于登录的凭据之外,这两个模式的数据源配置完全相同。我能够使用相同的数据源和基本的JDBC CallableStatement在INV中执行这些过程,并且我已经确认可以在SQL Developer中运行它们。

提前感谢任何帮助。

共有1个答案

夏侯野
2023-03-14

事实证明,我犯了一个愚蠢的错误(打字错误),仍然使用旧数据源,因此与INV不同。感谢Dmitry让我意识到这一点。仍然不知道为什么我无法使用Spring框架从不同的用户执行该过程,而我可以使用基本的JDBC Callable语句执行该过程。不过,它适用于INV数据源,这对我来说是一个令人满意的解决方案

 类似资料:
  • 我有一个非常复杂的oracle存储过程,它搜索和检索一些数据。该过程返回一个输出参数-oracle游标。我通过JDBC执行过程: 问题是,查询有时会花费相当长的时间(几分钟),我希望用户能够通过单击按钮随时取消查询。我引用了stmt对象,但不幸的是(从其他线程)调用stmt.cancel()没有效果。 另一方面,当我将CallableStatement sql更改为以下查询时: 在调用stmt.c

  • 问题内容: 我偶然发现了一个问题,无法自己解决。希望有人可以帮助我解决它。 因此,我在SQL Server 2005数据库中有一个简单的存储过程 以及在应用程序中带有和控件的asp.net页(VS2008) 如您所见,代码很简单。但是,如果我不麻烦在url上指定大头针(而不是)或指定空行(),则不会调用存储过程(我使用SQL Server Profiler对其进行了检查)。 而且,如果我用一个简单

  • 我刚开始冬眠。我试图通过Hibernate调用oracle存储过程。我可以按照一些步骤通过Hibernate调用过程吗。 提前谢了。

  • 下面是我的Oracle存储过程, 我得到以下异常:hibernate:{CALL REPORT_HIBERNATE(?)}org.hibernate.exception.GenericJDBcException:无法执行查询...并且由:java.sql.sqlException:无效的列索引引起 Plz让我知道在Spring中我将如何使用Hibernate注释调用这个存储过程??

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 我使用JDBC这样调用这个过程: 它向我抛出一个错误,通知调用格式错误。 但是如果我像这样直接在IDE中运行调用: