我不能为我的生活找到我想要的行为:
old:插入build_pc 值(&& buildA,35,40,32,29,26,22,22,null,13,11,7,1,999) new:插入build_pc 值(build_id_seq.nextval,35,40,32,29,26,22,22,null,13,11,7,1,999) 已插入1行。
作为SQL事务的一部分,我尝试保存变量,还有整数ID号,以便可以在整个事务中的几个位置输入。问题是SQLDev太聪明了,每次都转换回nextval函数而不是只存储一个int。
谷歌说使用套装,但这引发了这个:
SQLPLUS命令跳过:设置buildA = build_id_seq.nextval
答案 0 :(得分:3)
据我了解,您希望在SQL Plus中使用绑定变量。请试试这个:
variable buildA NUMBER;
exec select build_id_seq.nextval into :buildA from dual;
insert into build_pc values (:buildA, 35,40,32,29,26,22,22,null,13,11,7,1,999);
如果你使用11g你不需要选择序列的值,你可以使用:
variable buildA NUMBER;
exec :buildA := build_id_seq.nextval;
insert into build_pc values (:buildA, 35,40,32,29,26,22,22,null,13,11,7,1,999);
希望这有帮助!
答案 1 :(得分:1)
您应该使用define而不是设置替换变量:
define buildA = build_id_seq.nextval
...但是,只要您引用&buildA
,就会逐字替换,每次都会递增序列。
您可以使用绑定变量或new_value语法,但您可能只想在第一次使用时引用build_id_seq.nextval
,并在所有后续引用中引用build_id_seq.currval
,而不是试图自己存储它。
- CURRVAL:返回序列的当前值
- NEXTVAL:递增序列并返回下一个值
因此,当您调用nextval时,序列会递增,并且在同一会话中对currval的后续调用将获得相同的值,而不会再次递增。
这对于创建父/子记录很有用,例如,使用nextval创建主键值然后currval使用相同的值作为子记录中的外键。