Oracle中執行遠端DBMS_LOB包中過程

來源:互聯網
上載者:User

簡單描述執行遠端的DBMS_LOB包的一些問題。

由於LOB的定位器無法跨資料庫鏈使用,因此訪問遠端LOB對象的時候,需要調用遠端的DBMS_LOB包中的過程,但是測試發現,即使調用遠端的DBMS_LOB包中的過程,仍然可能出現問題。

SQL> CREATE TABLE T_LOB (ID NUMBER, CONTENTS CLOB);

表已建立。

SQL> DECLARE

2     V_LOB CLOB;

3  BEGIN

4     INSERT INTO T_LOB

5     VALUES (1, EMPTY_CLOB())

6     RETURN  CONTENTS INTO V_LOB;

7     FOR I IN 1..100 LOOP

8        DBMS_LOB.WRITEAPPEND(V_LOB, 32767, LPAD('A', 32767, 'A'));

9     END LOOP;

10  END;

11  /

PL/SQL過程已成功完成。

SQL> COMMIT;

提交完成。

SQL> SELECT DBMS_LOB.GETLENGTH(CONTENTS) FROM T_LOB;

DBMS_LOB.GETLENGTH(CONTENTS)

----------------------------

3276700

SQL> SELECT * FROM V$VERSION;

BANNER

----------------------------------------------------------------

Oracle Database10gEnterpriseEdition Release10.2.0.3.0 - 64bi

PL/SQL Release 10.2.0.3.0 - Production

CORE    10.2.0.3.0      Production

TNS for Linux: Version 10.2.0.3.0 - Production

NLSRTL Version 10.2.0.3.0 - Production

SQL> SELECT * FROM GLOBAL_NAME;

GLOBAL_NAME

----------------------------------------------------------------------------

TESTZJ

本欄目更多精彩內容:http://www.bianceng.cn/database/Oracle/

如果在遠端資料庫中,通過資料庫鏈擷取這個LOB欄位的長度,直接通過DBMS_LOB.GETLENGTH肯定是行不通的:

SQL> SELECT * FROM GLOBAL_NAME;

GLOBAL_NAME

----------------------------------------------------------------------------------

TEST08

SQL> SELECT * FROM V$VERSION;

BANNER

----------------------------------------------------------------

Oracle Database10gEnterpriseEdition Release10.2.0.3.0 - 64bi

PL/SQL Release 10.2.0.3.0 - Production

CORE    10.2.0.3.0      Production

TNS for Linux: Version 10.2.0.3.0 - Production

NLSRTL Version 10.2.0.3.0 - Production

SQL> CREATE DATABASE LINK TESTZJ

2  CONNECT TO TEST

3  IDENTIFIED BY TEST

4  USING '172.25.13.231/TESTZJ';

Database link created.

SQL> SELECT COUNT(*) FROM T_LOB@TESTZJ;

COUNT(*)

----------

1

SQL> SELECT DBMS_LOB.GETLENGTH(CONTENTS) FROM T_LOB@TESTZJ;

SELECT DBMS_LOB.GETLENGTH(CONTENTS) FROM T_LOB@TESTZJ

*

ERROR at line 1:

ORA-22992: cannot use LOB locators selected from remote tables

嘗試調用遠端的DBMS_LOB包,但是仍然會導致錯誤的產生:

SQL> SELECT DBMS_LOB.GETLENGTH@TESTZJ(CONTENTS) FROM T_LOB@TESTZJ;

SELECT DBMS_LOB.GETLENGTH@TESTZJ(CONTENTS) FROM T_LOB@TESTZJ

*

ERROR at line 1:

ORA-22992: cannot use LOB locators selected from remote tables

按道理來說,雖然T_LOB是遠端對象,但是DBMS_LOB調用的也是遠端過程,LOB定位器的使用並沒有跨越資料庫,因此應該是可以得到結果的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.