java - Spring JPA中调用oracle函数

标签 java oracle function spring-data-jpa entitymanager

我有这个

DECLARE
  c number;
BEGIN
  c := get_next_unlocked_id();
  DBMS_OUTPUT.put_line('id: ' || c);
END;

该查询打印函数结果。但我需要在我的 Spring 数据 JPA 存储库或 entitiManager 中返回此结果。

我试试这个:

@Override
    public Long getOld() {
        Long id = (Long) em.createNativeQuery("SELECT get_next_unlocked_id() FROM DUAL").getSingleResult();
        return id;
    } 

但我收到错误:

2019-01-10 15: 28: 25.768 ERROR 6724 --- [pool-1-thread-2] o.h.engine.jdbc.spi.SqlExceptionHelper: ORA-14551: the DML operation cannot be performed inside the request
ORA-06512: on "MY.GET_NEXT_UNLOCKED_ID", line 8

最佳答案

您在 select 中调用的函数 (get_next_unlocked_id) 尝试进行数据修改,但您尝试的方式不允许这样做。

问题在于您的解决方案似乎在“查询”,而实际上它正在修改数据。我假设你的函数增加了一些计数器或更新了一些东西?您收到的 ORA 错误代码非常具有描述性,这里是 longer explanation .

无论哪种方式的解决方案都是使用 CallableStatements来自 Java。

关于java - Spring JPA中调用oracle函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54128858/

相关文章:

java - 尝试从 servlet 连接到 Oracle XE 时出现 ORA-01017 错误

sql - Oracle SQL 中仅排除一个 MIN 值

java - 如何配置 WireMock 以使用 https(和随机端口)?

java - org.openqa.selenium.ElementNotInteractableException : Cannot click on element

sql - Oracle 相当于 T-SQL SET @var = @var + ' ' ;

c++ - 没有输入/输出的函数是过程吗?

matlab - 如何在 MATLAB 的函数内创建 GUI?

c++ - 让编译器在编译前推断出函数的参数

java - 在Oracle SQL中编译Java源代码时Base64出现错误

java - KeyListener 仅有时有效