有一个名为 test_seq 的SEQUENCE。
SELECT TO_NUMBER('-'||TO_CHAR(test_seq.currval)) from DUAL; // can work
ALTER SEQUENCE test_seq INCREMENT BY TO_NUMBER('-'||TO_CHAR(test_seq.currval)); // wrong!
我可以在 ALTER 语句中使用函数(例如:TO_NUMBER()
或TO_CHAR()
)吗?
答案 0 :(得分:2)
No,你做不到。铁路图不允许它。
答案 1 :(得分:0)
您可以使用EXECUTE IMMEDIATE语句在块中完成它,如图所示。
DECLARE
next_increment NUMBER := TO_NUMBER('-'||TO_CHAR(test_seq.currval));
BEGIN
EXECUTE IMMEDIATE 'ALTER SEQUENCE test_seq INCREMENT BY '||next_increment;
END;
/
但请确保 -
在执行此操作之前至少运行了一次test_seq.nextval 块。
谨慎使用序列增量。您可能会得到以下内容 如果它低于序列的MINVALUE则出错。
ORA-08004:
序列TEST_SEQ.NEXTVAL
低于MINVALUE
且无法实例化