Oracle

Oracle 中的 sp_sequence_get_range 等效項

  • February 9, 2019

我們在 Oracle 中是否有 sp_sequence_get_range 等價物。

我總是需要將我的序列推進一些數字,我怎樣才能做到這一點。

只需改變然後增加序列。

例如,要增加 1000:

ALTER SEQUENCE yoursequence INCREMENT BY 1000;

SELECT然後,您必須NEXTVAL從序列中重新更改它以增加通常的值以恢復“正常”操作。

要檢查目前值而不增加:

SELECT yoursequence.CURRVAL FROM DUAL;

如果您需要減少序列,只需ALTER SEQUENCE減少一個負數(非常直覺!)。

因為過程結構MSSQL 是:

EXEC sys.sp_sequence_get_range
   @sequence_name     = ‘CyclingSequence’,
   @range_size        = 3,
   @range_first_value = @firstValue OUTPUT,
   @range_last_value  = @lastValue OUTPUT;
SELECT
   FirstValue = CONVERT(INT, @firstValue),
   LastVlaue = CONVERT(INT, @lastValue),
   NextValue = NEXT VALUE FOR CyclingSequence
GO

然後我們可以將其轉換為:

CREATE SEQUENCE sequence_name
 MINVALUE value
 MAXVALUE value
 START WITH value
 INCREMENT BY value;

或者您可以製作 ORACLE 函式,例如(我不聲明該函式的所有權):

declare
 v_initial number := 1;
 temp      number := 0;
 cmd       varchar2(100);

begin
 cmd := 'alter sequence SEQ increment by -1';
 execute immediate cmd;

 while true loop
   cmd := 'select SEQ.nextval from dual';
   execute immediate cmd;

   select last_number
     into temp
     from user_sequences
    where sequence_name = 'SEQ';

   if temp = v_initial then
      exit;
   end if;
 end loop;
end;

引用自:https://dba.stackexchange.com/questions/91475