oracle:如何在“中使用函数”;改为;陈述

oracle:如何在“中使用函数”;改为;陈述,oracle,oracle11g,Oracle,Oracle11g,有一个名为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())吗?,您不能。铁路图不允许这样做。,你不能。铁路图不

有一个名为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:
    sequence
    TEST\u SEQ.NEXTVAL
    位于
    MINVALUE
    下方,无法实例化


您可以使用块中的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:
    sequence
    TEST\u SEQ.NEXTVAL
    位于
    MINVALUE
    下方,无法实例化