İki Farklı DB üzerindeki LONG Tipindeki Data'ların Güncellenmesi

 

İki Farklı DB üzerindeki LONG Tipindeki Data'ların Güncellenmesi

"ORA-00997: illegal use of LONG datatype"


    Bildiğiniz gibi LONG tipindeki dataları update edemiyoruz. "ORA-00997: illegal use of LONG datatype" hatası veriyor. Proje gereği iki farklı db'de bulunan LONG tipindeki dataları align etmemiz gerekiyordu. Bunun için aşağıdaki adımları yaparak update işlemini gerçekleştirebildik.

 

    İlk önce setlemek istediğiniz data bloğunu row_id ve LONG datalı olacak şekilde bir tablo create ediyoruz. (aşağıdaki örnekte s_note_sanit_as_is)

create table Siebel.s_note_sanit_as_is as select row_id, to_lob(note) from siebel.s_note_sr

CMD üzerinden aşağıdaki gibi komutla bu tablonun .DMP uzantılı exportunu alıyoruz.

exp link_user/link_userpass@EXPORT_DB tables=siebel.s_note_sanit_as_is


    Sonrasında aşağıdaki komutla oluşan DMP file’ı import ediyoruz. (önemli nokta oluşturulan ara tablo import edilecek db’de olmamalıdır).

imp siebel/siebel_pass@IMPORT_DB file='D:\EXPDAT.DMP' full=y

 sonrasında aşağıdaki procedure ile bu datayı update edebiliyoruz.


ÖNEMLİ: procedure yazılmasının sebebi update yapıldığı durumda LONG tipine bu şekilde setleyemezsiniz hatası veriyor. Önemli olan bunu bir değişkene atayıp o değişkeni set etmek.

 

 

DECLARE

  CURSOR STABLE

  Is

  Select t1.row_id, t1.note From siebel.S_NOTE_SANIT_AS_IS t1 , S_NOTE_SR t2 where t1.row_id = t2.row_id and t2.note is null;

 

  TYPE t_EDIT2 IS TABLE OF STABLE%ROWTYPE INDEX BY BINARY_INTEGER;

  AUDITTBL2 t_EDIT2;

  mail_val LONG;

  queri long;

 

  BEGIN

    OPEN STABLE;

  LOOP

    FETCH STABLE BULK COLLECT INTO AUDITTBL2;

    EXIT

  WHEN AUDITTBL2.COUNT = 0;

    FOR indx2 IN AUDITTBL2.FIRST .. AUDITTBL2.LAST --Tabloları gezmeye başla

    LOOP

  mail_val:= Audittbl2 (Indx2).note;

                queri:= 'update siebel.S_NOTE_SR set note= :1 where row_id = :2';

                execute immediate queri using mail_val, Audittbl2 (Indx2).row_id;

                COMMIT;

                END LOOP; --STABLE FOR

  END LOOP;   --OPEN STABLE

  CLOSE STABLE;

  End;

/








Yorumlar

Bu blogdaki popüler yayınlar

Siebel OpenUI Presentation Model ve Physical Renderer Yapısı

Long running query'ler için Query Plan fixleme

Profile Attribute Listesi