Clob alanına sahip tablonun , uzak veritabanından sorgulanması

15 Mar by Ahmet Duruöz

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.

 

 

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir