Oracle
使用分佈式 Lobs 創建視圖
我有兩個 Oracle 18c 實例(實例 1 具有模式 DB1,實例 2 具有模式 DB2)並且我知道自 12.2 以來就支持分佈式 lob。所以我做了以下事情:
CREATE TABLE DB1.TEST_TABLE ID NUMBER, FOO CLOB; INSERT INTO DB1.TEST_TABLE (ID, FOO) VALUES (1, "RANDOM TEXT");
現在我創建了 da databaselink 以從實例 2 訪問 DB1
SELECT * FROM DB1.TEST_TABLE@REMOTE_LINK
選擇完美。但是如果我想用這個選擇創建一個視圖,我會得到一個錯誤:
CREATE VIEW DB2.V_TEST_TABLE AS SELECT * FROM DB1.TEST_TABLE@REMOTE_LINK ORA-22992: cannot use LOB locators selected from remote tables 22992. 00000 - "cannot use LOB locators selected from remote tables" *Cause: A remote LOB column cannot be referenced. *Action: Remove references to LOBs in remote tables.
我不明白為什麼選擇分發 lob 可以正常工作,但不能創建此選擇的視圖。
如果返回的所有對像都是標量而不是 lob,則可以使用視圖。在這種情況下,如果您返回了 LOB 的前 4000 個字元,那麼文件表明只要返回的結果不是 LOB,就允許使用在源上創建臨時 lob 的函式。
12 的文件在這裡。它並沒有說創建視圖將以 Oracle 方式工作,這意味著只有他們描述的內容才能工作:
create table t as select * from ...
insert into t select * from ...
- 使用返回標量的函式,例如 DBMS_LOB.SUBSTR(your_lob, 32767, 1);
另一種解決方法是在源數據庫上創建帶有修剪 lob 的視圖,然後在目標數據庫上創建視圖的視圖。
請注意,將 LOBS 選擇到目標中的對象會自動將其轉換為目標的字元集的小問題。解決方法是轉換為 RAW 並選擇然後轉換回。