我正在尝试用负数推进序列,但我不断收到以下错误:
ORA-02286:没有为ALTER SEQUENCE指定选项
到目前为止,谷歌搜索量没有任何帮助。我使用的陈述是
ALTER SEQUENCE %s.nextval INCREMENT BY ?
序列名称通常为schema.table_name_seq
。包含模式名称是不可避免的,因为连接不一定是同一个。
附加一个无关紧要的选项,如minvalue 1
也没有做任何事情来满足它。
我的第二次尝试是从查询中删除.nextval
并直接在序列上运行ALTER
(只是在墙上扔东西以查看此时的内容),即:
ALTER SEQUENCE %s INCREMENT BY ?
导致
ORA-01722:无效号码
接下来,我提供了一个正整数,并在查询(INCREMENT BY -?
)中将其否定,产生了相同的错误。查询是这样准备的:
num = -1 * Math.abs(num);
stmt = conn.prepareStatement(sql);
stmt.setLong(1, num); //also tried setInt()
stmt.execute();
我们的想法是将给定表的.nextval
序列设置为任意数字(但总是超过minval
)。
答案 0 :(得分:1)
JustinCave的评论最具启发性:
alter sequence
是DDL。您不能在DDL中使用绑定变量。您需要动态构建所需的DDL语句并执行它,使用PreparedStatement这样做是没有意义的。
认识到有更好的方法,但承认时间限制,我构造了以下SQL语句:
ALTER SEQUENCE %s INCREMENT BY %d
就像魅力一样。是的,在每个请求中硬编码要前进的数字。不是最好的解决方案,但我现在无法创建存储过程,所以它必须这样做。
谢谢Justin。