Oracle
Oracle 中的 sp_sequence_get_range 等效項
我們在 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;