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 使用声明的值来设置序列开始 [重复]的主要内容,如果未能解决你的问题,请参考以下文章