【发布时间】:2017-06-08 09:33:51
【问题描述】:
我将 Oracle DB V10.2.0.1.0 用于我的项目,并使用 Java 作为服务器。我正在尝试仅通过代码将数据添加到几个表中,但它需要使用相同的序列值。
我有一个序列,它代表T_GROUP 表的ID,名为GROUP_SEQ。
(增量:1,Min_Value:1,Max_Value:999999999999999999999999,缓存大小:20,周期:否,顺序:否)。
一旦我将一个新组输入到数据库中,所述 GROUP_SEQ 就会被触发器递增:
CREATE OR REPLACE TRIGGER GROUP_TRIGGER2
BEFORE INSERT ON T_GROUP for each row
begin
SELECT GROUP_SEQ.nextval
INTO :new.ID
from dual;
END;
在我的代码中,我在代码中执行了addGroup() 函数,该函数成功添加了一个新组以及正确的GROUP_SEQ 值,但是当我尝试获取currval 时它失败了,因为我自己没有使用 nextval,所以我得到了这个异常:
ORA-08002: sequence GROUP_SEQ.currval is not yet defined in this session
即使我确实在触发器中定义了它。如果我通过 SQLplus cmd 运行相同的命令,也会发生同样的情况。
提前致谢!
【问题讨论】:
-
你违反了甲骨文的第一条诫命,即:“你必须指定你的模式,否则将遭受永恒的诅咒;你的头上会坠落蛇、青蛙和其他爬行动物和两栖动物 - 是的, 即使在你的头上也会落下蟾蜍”。巧合?我认为不是!!!! :-)
-
你在java服务器中使用连接池吗?
-
@krokodilko 我不确定-在注册驱动程序后,我正在使用单例通过
java.sql.DriverManager的DriverManager.getConnection()函数获得单个连接。我想它确实在后台使用了连接池,但我没有自己创建一个池 -
@krokodilko Brilliant,感谢您的启发
标签: sql oracle jdbc triggers sequence