我有这个
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/