ORACLE UPDATE SEQUANCE NEXTVAL, Güncelleme

by Nurgün Özgür 11. November 2010 12:32

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;

 

Tags: , ,

Oracle

Comments

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading



Nurgün Özgür

Facebook

 

Nurgün Özgür Photo

1993'ten bu yana profesyonel olarak yazılım ve sistem yönetimi konularında çeşitli yerli ve yabanci kuruluşların farklı kademelerinde aktif olarak yer aldım. 2011 yılında emekliliğe ayrıldım.

 

Valid XHTML 1.0 Transitional


Tag cloud


Facebook ile giriş