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

时间:2017-07-05 08:49:54

标签: sql database oracle plsql

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





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




  DECLARE开头的SEQUENCE maxId NUMBER;

 BEGIN
 SELECT max(id)+1 INTO maxId FROM TABLE;
创建序列“DB”。“SEQ_TABLE”MINVALUE 1 MAXVALUE 999999以1开始递增maxId CACHE 20 NOORDER NOCYCLE;
 END;
 /
  
&#xA ;


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





我怎样才能实现这个目标?




3 个答案:

答案 0 :(得分: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;
/

所有编辑......

答案 1 :(得分:1)

你可以试试这个:

 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;
    /

答案 2 :(得分:0)

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

我确实喜欢这样:

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;
  /