有一个名为test_seq的序列。
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()
(吗?
不,你不能。铁路图不允许这样做。
您可以使用块中的 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 块。
请谨慎使用序列增量。您可能会得到以下内容 错误,如果它低于序列的最小值。
ORA-08004:
序列TEST_SEQ.NEXTVAL
低于MINVALUE
且无法实例化