Clob alanına sahip tablonun , uzak veritabanından sorgulanması
CLOB alan içeren bir tablo , uzak veritabanından db link ile sorgulandığında ORA-22992 şeklinde hata vermektedir. Bu hataya sebep olmadan clob alan içeren bir tablo 2 farklı yöntemle uzak veritabanından sorgulanabilir.
DB link ile direkt sorgulandığında aşağıdaki gibi hata alınacaktır.
SQL> select msg from aduruoz.mesaj@remote_db; ERROR: ORA-22992: cannot use LOB locators selected from remote tables no rows selected
Sorgulamanın başarılı olmasını 2 yöntemle sağlayabiliriz :
1. Yöntem :
Uzak veritabanında clob alan içeren tabloyu , clob alanını dbms_lob.substr ile sorgulayan bir view oluşturup, veritabanından db link ile bu view sorgulanabilir.
Aşağıdaki şekilde bir remote_db isimli db linkinin gösterdiği veritabanımızdaki aduruoz.mesaj tablomuzdan sorgulama yapmak istediğimizi varsaylım.
SQL> desc aduruoz.mesaj; Name Null? Type ----------------------------------------- -------- ---------------------------- MSG_SEQ NUMBER EVENT_SEQ NUMBER MSG CLOB
Bu tablo için uzaktaki veritabanında view oluşturuyoruz.
SQL> CREATE OR REPLACE FORCE VIEW MESAJ_VIEW (MSG)AS SELECT dbms_lob.substr(msg,4000,1) FROM ADURUOZ.MESAJ; View created.
Diğer veritabanından db link ile bu görüntüyü sorguladığımızda tablonun sorgulandığını göreceksiniz.
SQL> select * from aduruoz.mesaj_view@remote_db; MSG -------------------------------------------------------------------------------- Bu bir mesajdır
2. Yöntem :
Sorgulama yaptığımız veritabanında global temp tablo oluşturup bu tabloya , uzaktaki veritabanındaki tablodan verileri insert edelim. Benzer şekilde temp tabloyu sorgulayarak , uzaktaki veritabanındaki tablodaki verilere ulaşmış oluruz.
Temp tablo oluşturuyoruz.
SQL> create global temporary table mesaj_global ( msg clob ); Table created.
Temp tabloya veri insert ediliyor.
SQL> insert into mesaj_global select msg from aduruoz.mesaj@remote_db; 1 row created.
Temp tablo sorgulanıyor.
SQL> select * from mesaj_global; MSG -------------------------------------------------------------------------------- Bu bir mesajdır
Görüldüğü üzere uzaktaki bir veritabanından clob alan içeren tabloları sorgulamak mümkündür.