PL/SQL 使用声明的值来设置序列开始 [重复]

Posted

技术标签:

【中文标题】PL/SQL 使用声明的值来设置序列开始 [重复]【英文标题】:PL/SQL use a value declared for setting a sequence start [duplicate] 【发布时间】:2017-07-05 08:49:53 【问题描述】:

我是 Oracle PL/SQL 的新手,到目前为止我尝试过的方法都不起作用

我想得到我表的max(id)...然后创建一个以maxID+1开头的序列

DECLARE maxId NUMBER;

BEGIN
  SELECT max(id)+1 INTO maxId FROM TABLE;
  CREATE SEQUENCE "DB"."SEQ_TABLE"  MINVALUE 1 MAXVALUE 999999 INCREMENT BY 1 START WITH maxId CACHE 20 NOORDER NOCYCLE;
END;
/

但是我不能在这里使用CREATE ...

我怎样才能做到这一点?

【问题讨论】:

你可以使用Dynamic SQL 【参考方案1】:

动态SQL如下:

DECLARE 
  maxId NUMBER;
  v_sql varchar(200);
BEGIN
  SELECT max(ID) INTO maxId FROM MyTable;
  v_sql := 'CREATE SEQUENCE SEQ_TABLE  MINVALUE 1 MAXVALUE 999999 INCREMENT BY 1 START WITH '|| to_char(maxId) ||' CACHE 20 NOORDER NOCYCLE';
  execute immediate v_sql;
END;
/

所有编辑...

【讨论】:

【参考方案2】:

你可以试试这个:

 DECLARE
       maxId   NUMBER;
       v_sql   VARCHAR2 (200);
    BEGIN
       SELECT MAX (employee_id) + 1
         INTO maxId
         FROM employee;

         v_sql:= 'CREATE SEQUENCE SEQ_TABLE START WITH '|| maxId ||' INCREMENT BY 1 MINVALUE 1 MAXVALUE 999999 NOORDER  NOCYCLE';        
        EXECUTE IMMEDIATE v_sql ;
    END;
    /

【讨论】:

【参考方案3】:

感谢您的帮助,但我终于找到了方法!

我确实喜欢这样:

DECLARE maxId NUMBER;

BEGIN
  SELECT max(id)+1 INTO maxId FROM TABLE;
  execute immediate 'CREATE SEQUENCE  "DB"."SEQ_TABLE"  MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH '|| maxId ||' CACHE 20 NOORDER  NOCYCLE';
END;
  /

【讨论】:

以上是关于PL/SQL 使用声明的值来设置序列开始 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 pl/SQL 中继续声明? [复制]

通过重复固定范围的值来扩展列表

Oracle:将序列设置为特定值[重复]

PL / SQL将数字转换为文本[重复]

Oracle PL/SQL学习之基础篇

用于在表上自动生成 ID 的序列和触发 PL/SQL 脚本