我有一个名为 SEQ_SYNTAX 的序列。我需要通过从另一个名为 INCREMENTS 的表中查找值来设置该序列的 last_number 值。我可以通过执行 SELECT LASTVAL FROM INCRMENTS WHERE TABLE = 'SYNTAX';
从增量表中获取值如何编写一个可以设置该序列值的简单 SQL 脚本?假设如果 table = 'SYNTAX' 的增量表中的 Lastval 为 3000,我想将序列 SEQ_SYNTAX 的 Last_number 设置为 3000。
谢谢你。
从 12c 开始,您可以简单地重置起始值。以编程方式执行此操作将需要 PL/SQL,因此我们必须使用
EXECUTE IMMEDIATE
,因为 ALTER SEQUENCE
是 DDL:
DECLARE
var_sequence_name varchar2(128) := 'SEQ_SYNTAX';
var_new_value integer;
BEGIN
SELECT MAX(lastval)
INTO var_new_value
FROM increments
WHERE "TABLE" = 'SYNTAX';
IF var_new_value > 0
THEN
EXECUTE IMMEDIATE 'alter sequence "'||var_sequence_name||'" restart start with '||v_new_value;
END IF;
END;
如果您是 12c 之前的版本,如果新值低于当前值,则必须删除并重新创建序列,或者如果新值更大,则使用脚本进行虚拟前进,直到达到新值。这很麻烦,所以我们很感谢 12c 的增强功能。