我将Oracle DB V10.2.0.1.0用于我的项目,以及Java作为服务器。我试图仅通过代码将数据添加到几个表中,但它需要使用相同的序列值。
我有一个序列,代表T_GROUP
表的名为GROUP_SEQ
的ID。
(递增: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
值,但是当我尝试获取{ {1}}它失败了,因为我没有在它上面使用nextval,我得到了这个例外:
currval
即使我确实在触发器中定义了它。如果我通过SQLplus cmd运行相同的命令,则会发生相同的情况。
提前致谢!
答案 0 :(得分:0)
解决了!
问题确实是我正在使用的连接 - 有一个地方我再次使用var data = {
"cars": [{
"id": "1",
"name": "name 1",
"thsub": [{
"id": "11",
"name": "sub 1",
"stats": {
"items": 5,
},
"ions": null
}, {
"id": "22",
"name": "sub 2",
"stats": {
"items": 5,
},
"translations": null
}],
"image": null
},
{
"id": "2",
"name": "name 2",
"thsub": null, //this will break the code
"image": null
}
]
}
var thCount = [];
for (var l = 0, m = data.cars.length; l < m; l++) {
thCount[l] = 0;
for (var i = 0, j = data.cars[l].thsub.length; i < j; i++) {
if (data.cars[l].thsub[i].stats) {
thCount[l]+=data.cars[l].thsub[i].stats.items;
}
}
}
console.log(thCount);
,因此有不同的会话。
谢谢@krokodilko
答案 1 :(得分:0)
如果您要将数据插入多个表中,那么编写一个存储过程,一次性为所有表执行DML:
CREATE OR REPLACE PROCEDURE add_group(
in_column_a IN T_GROUP.COLUMN_A%TYPE,
in_column_b IN T_GROUP.COLUMN_B%TYPE,
out_id OUT T_GROUP.ID%TYPE
)
AS
BEGIN
INSERT INTO T_GROUP (
id,
column_a,
column_b
) VALUES (
GROUP_SEQ.NEXTVAL,
in_column_a,
in_column_b
)
RETURNING id INTO out_id;
INSERT INTO other_table (
id
) VALUES (
out_id
);
END;
/
几乎在所有情况下,您都不需要使用触发器。