我有一个表,其中id列从序列中获取其值。
我正在使用OCI与数据库进行交互。
在向表中插入记录后,我需要获取插入记录时所使用的序列的值(进入我的进程内存),这实际上是为当前会话生成的最新序列值。根据{{3}}回答,它应该是可能的。
我发现(function (guess, tryy, message) {
var comp = function () {
return Math.floor(Math.random() * 6)
};
var number = comp();
var count = 0;
var test = function () {
var val = guess.value;
if (!Number.isNaN(val) && val >= 0 && val <= 5) {
switch (true) {
case val > number:
message.innerHTML = 'Your guess was too high!';
count++;
break;
case val < number:
message.innerHTML = 'Your guess was too low!';
count++;
break;
case val == number:
count++;
message.innerHTML = 'Congratulations you found the number! It took you ' + count + ' guesses';
//Reseting game here
setTimeout(function(){
count = 0;
number = comp();
guess.value = '';
message.innerHTML = 'Your game has been reset';
}, 2000);
break;
};
}
};
tryy.onclick = test;
guess.onkeyup = function (e) {
if (e.keyCode == 13) {
test();
}
}
})(document.getElementById('guess'), document.getElementById('tryy'), document.getElementById('message'));
表可能适合我的目的,但我不确定是否可以使用它,因为它有关于当前用户的序列数据。我需要的是当前会话的序列数据。我有多个使用相同用户ID和密码的并发数据库会话。
答案 0 :(得分:3)
insert into testtable (ID, ...)
values (schema.seq_testtable.nextval, ...)
returning ID into currID;
你可以在这里阅读“返回”条款:
http://psoug.org/snippet/UPDATE-with-RETURNING-clause_604.htm
答案 1 :(得分:1)
您可以使用sequence_name.currval。 Oracle documentation说:
将序号用于CURRVAL
要使用或引用会话的当前序列值, 引用seq_name.CURRVAL。 CURRVAL只能用于 seq_name.NEXTVAL已在当前用户会话中引用(in 当前或以前的交易)。 CURRVAL可以引用为 必要时多次,包括同一次多次 声明。 NEXTVAL之前不会生成下一个序列号 引用。
答案 2 :(得分:1)
您应该指定您使用的开发环境。如果你使用JAVA,当你遇到问题时,因为JDBC假定DML语句只有输入绑定参数。常见的技巧是将INSERT语句包装到匿名块中并使其成为可调用语句。
begin
insert into t(id, x) valuse(t_seq.next_val, :x) returning in into :id;
end;
这样的可调用语句将具有一个IN和一个OUT参数。 JDBC 3.0也引入了它自己的方式(getGeneratedKeys()方法),但我不确定它如何与Oracle一起工作。
如果是OCI,它可以开箱即用。如果我在OCI中正确回忆你只是调用OCIBindByName并指定,那么来自returns子句的变量是类型(INOUT)。然后在执行后,您将找到从该绑定变量中的语句返回的ID。它甚至适用于批量插入,即您传递要插入数据库的值的向量,并获得生成ID的向量。
我无法快速找到任何OCI示例。在OTL(OCI包装器lib)的情况下,它在here。我认为任何OCI包装器lib都支持它。另外看一下OCILIB,它的源代码更容易阅读。
答案 3 :(得分:-1)
SEQ_NAME.CURRVAL,但是在这种情况下你有第一次在当前会话中必须有相同序列的NEXTVAL,如果顺序有CACHE你可以使用返回插入ID的#EntGriff选项来变量