İ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"
İ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
Ö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
Yorum Gönder