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

我是 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

标签: sql database oracle plsql


【解决方案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;
        /
      

      【讨论】:

        猜你喜欢
        • 2012-10-12
        • 2020-07-25
        • 2022-12-17
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多