Sequance'ın değerini 2 farklı yöntemle değiştirebilirsiniz(benim kullandığım)
1. drop sequance/create sequance(start değeri değişir)
DROP SEQUENCE DT_SCHEMA_DBA.SQ_BILL
CREATE SEQUENCE DT_SCHEMA_DBA.SQ_BILL
START WITH 19157170
MAXVALUE 999999999999999999
MINVALUE 1
NOCYCLE
CACHE 20
NOORDER;
2. Increment değerini değiştirerek. (start değeri değişmez)
/*
sequance nextval değerini START value güncellemeden değiştiren scrpti
üreten script
*/
declare
v_sql varchar2(2000);
v_owner varchar2(30);
v_table varchar2(30);
v_sq varchar2(30);
v_current_sq number;
v_tbl_max_sq number;
v_delta number;
begin
v_owner := 'DT_BILLING_DBA';
--v_sq := 'SQ_BILL';
v_table := 'BILL';
--v_pk := 'BILL_ID';
--1. mevcut seq değeri bul
v_sql := 'select '||v_owner||'.SQ_'||v_table||'.NEXTVAL from dual';
EXECUTE IMMEDIATE v_sql INTO v_current_sq;
--dbms_output.put_line('v_current_sq='||v_current_sq);
--2. mevcut tablodaki maxtdeğeri bul
v_sql := 'select max('||v_table||'_ID) from '||v_owner||'.'||v_table;
EXECUTE IMMEDIATE v_sql INTO v_tbl_max_sq;
--dbms_output.put_line(v_sql);
--dbms_output.put_line('v_tbl_max_sq='||v_tbl_max_sq);
--3. düzeltmeye gerek var mı?
if v_tbl_max_sq > v_current_sq then
--bir sonraki seq alınması ve insert edilmesinde unique pk hata vereceğinden
--düzeltme gerekiyor
dbms_output.put_line('Alttaki üç satırı çalıştırın!');
--4. artırma değerini = delta yap
v_delta := 1+v_tbl_max_sq - v_current_sq;
v_sql := 'alter sequence '||v_owner||'.SQ_'||v_table||' increment by '||v_delta;
--EXECUTE IMMEDIATE v_sql;
dbms_output.put_line(v_sql||';');
--5.delta kadar arttır
v_sql := 'select '||v_owner||'.SQ_'||v_table||'.nextval from dual';
--EXECUTE IMMEDIATE v_sql INTO v_current_sq;
dbms_output.put_line(v_sql||';');
--6. artırma değerini = 1 yap
v_delta := v_tbl_max_sq - v_current_sq;
v_sql := 'alter sequence '||v_owner||'.SQ_'||v_table||' increment by 1';
--EXECUTE IMMEDIATE v_sql;
dbms_output.put_line(v_sql||';');
else
dbms_output.put_line('SQ güncellemeye gerek yok!');
end if;
END;