ORACLE修改序列值为表内某字段(主键)最大值
想修改序列值,网上基本的都是自己看要加到多少,然后要么调步长,要么删了重建。
想直接用declare使用标量然后调,但是逻辑里面不能有DDL语句。
不过最后解决了
直接上代码:
-- 删除原序列
drop sequence txxx_s;
declare
maxid integer; -- 最大ID变量
v_cursor integer; -- 游标
v_sql varchar2(500); -- sql
begin
-- 将最大的id插入到变量中
select max(id) into maxid from txxx;
v_cursor:=dbms_sql.open_cursor;
v_sql:= 'create sequence txxx_s start with ' || maxid ;
dbms_sql.parse(v_cursor, v_sql, dbms_sql.v7);
dbms_sql.close_cursor(v_cursor);
end;
参考:
PL/SQL块中不能直接执行DDL语句(错误)
傻逼了我,原来还有更简单的,然后没有其他权限风险的。。。我也不知道上面为什么执行DDL语句会报错- -,直接execute就好了嘛。。
最新代码:
drop sequence txxx_s;
declare
maxid integer;
v_sql varchar2(500);
begin
select max(id)+1 into maxid from txxx;
v_sql:= 'create sequence txxx_s start with ' || maxid ;
EXECUTE IMMEDIATE v_sql;
end;