【发布时间】:2015-02-24 16:57:52
【问题描述】:
我被这个非常简单的脚本困住了。它没有像我预期的那样工作。
declare
st VARCHAR(1024);
begin
for x in (SELECT sequence_name FROM USER_SEQUENCES) loop
st := 'ALTER SEQUENCE ' || x.sequence_name || ' INCREMENT BY 1000';
execute immediate st;
st := 'select ' || x.sequence_name || '.nextval from dual';
execute immediate st;
st := 'ALTER SEQUENCE ' || x.sequence_name || ' INCREMENT BY 1';
execute immediate st;
end loop;
end;
/
当我运行它时,它似乎根本不起作用 - 我的所有序列都保持原样,并且它们没有被动态语句增加一千。如果我在匿名块之前和之后检查nextval,差异只有1,而不是1001。
如果我将 execute immediate 替换为 dbms_output.put_line 并手动执行生成的命令,则序列会根据需要进行更改。
我错过了什么?
【问题讨论】:
-
我相信这对你有用。 asktom.oracle.com/pls/asktom/…
-
你得到了什么结果,你期望什么结果?
-
你用的是什么版本?在 12c 中,有一种稍微简单的方法可以做到这一点。
-
@JonHeller,我使用的是 12c,我该如何在这个版本上做到这一点?
标签: oracle plsql sequence execute-immediate