10.1 SQLおよびPL/SQLでのリモートLOBの操作
この項では、リモートLOBでサポートされるSQL関数およびPL/SQL関数について説明します。
SQL関数
ネストした関数によって返される最終値がLOB型でないかぎり、ローカルのLOBとBFILEでサポートされるすべてのSQL組込み関数およびユーザー定義型関数は、リモートのLOBとBFILEでもサポートされます。これには、リモートの永続および一時LOBとBFILE用のファンクションも含まれます。
次の項のほとんどの例では、print_media表を使用します。表の構造は次のとおりです。

リモート・サイトで実行されるSQL組込み関数は、SELECT、INSERT、UPDATEおよびDELETEと同様に、SQL文内に含めることができます。たとえば:
SELECT LENGTH(ad_sourcetext) FROM print_media@remote_site -- CLOB
SELECT LENGTH(ad_fltextn) FROM print_media@remote_site; -- NCLOB
SELECT LENGTH(ad_composite) FROM print_media@remote_site; -- BLOB
SELECT product_id from print_media@remote_site WHERE LENGTH(ad_sourcetext) > 3;
UPDATE print_media@remote_site SET product_id = 2 WHERE LENGTH(ad_sourcetext) > 3;
SELECT TO_CHAR(foo@dbs2(...)) FROM dual@dbs2;
-- where foo@dbs2 returns a temporary LOB
PL/SQL関数
ネストしたファンクションによって戻される最終値がLOBでないかぎり、リモート・サイトで実行され、リモートLOBとBFILEを操作する、組込みおよびユーザー定義型PL/SQLファンクションを使用できます。
SELECT product_id FROM print_media@dbs2 WHERE foo@dbs2(ad_sourcetext, 'aa') > 0;
-- foo is a user-define function returning a NUMBER
DELETE FROM print_media@dbs2 WHERE DBMS_LOB.GETLENGTH@dbs2(ad_graphic) = 0;
リモートのユーザー定義型関数に関する制限事項
SQL関数およびPL/SQL関数は、次のカテゴリの包括的でないリストに分類されます。
- LOBでサポートされていないSQLファンクション
LOBでサポートされていない
DECODE関数などのSQL関数は、リモートLOBでもサポートされません。 - 1つのLOB引数のみを受け入れ(他のすべての引数はLOB以外のデータ型)、LOBを返さない関数
LENGTH関数などの関数がサポートされています。たとえば:
SELECT LENGTH(ad_composite) FROM print_media@remote_site; SELECT LENGTH(ad_header.logo) FROM print_media@remote_site; -- LOB in object SELECT product_id from print_media@remote_site WHERE LENGTH(ad_sourcetext) > 3; -
LOBを戻すファンクション
これらのファンクションは、元のLOBを戻すか、または一時LOBを生成する場合があります。これらのファンクションは、ローカル・サイトに戻される結果がLOBでないかぎり、リモート・サイトで実行できます。
- 一時LOBを戻すファンクションには、
REPLACE、SUBSTR、CONCAT、||、TRIM、LTRIM、RTRIM、LOWER、UPPER、NLS_LOWER、NLS_UPPER、LPAD、およびRPADがあります。 - 元のLOBロケータを戻すファンクションには、
NVL、DECODEおよびCASEがあります。
たとえば、次の文がサポートされています。
SELECT TO_CHAR(CONCAT(ad_sourcetext, ad_sourcetext)) FROM print_media@remote_site; SELECT TO_CHAR(SUBSTR(ad_fltextnfs, 1, 3)) FROM print_media@remote_site;しかし、次の文はサポートされていません。
SELECT CONCAT(ad_sourcetext, ad_sourcetext) FROM print_media@remote_site; SELECT SUBSTR(ad_sourcetext, 1, 3) FROM print_media@remote_site; - 一時LOBを戻すファンクションには、
-
1つ以上のLOB引数を受け入れるファンクション。
これらには、
INSTR、LIKE、REPLACE、CONCAT、||、SUBSTR、TRIM、LTRIM、RTRIM、LPADおよびRPADがあります。これらのファンクションは、すべてCLOBおよびNCLOBのみに該当します。これらの関数は、すべてのLOB引数が同じ
dblinkにある場合にのみサポートされます。たとえば、次がサポートされています。SELECT TO_CHAR(CONCAT(ad_sourcetext, ad_sourcetext)) FROM print_media@remote_site; -- CLOB SELECT TO_CHAR(CONCAT(ad_fltextn, ad_fltextn)) FROM print_media@remote_site; -- NCLOBただし次はサポート対象外
SELECT TO_CHAR(CONCAT(a.ad_sourcetext, b.ad_sourcetext)) FROM print_media@db1 a, print_media@db2 b WHERE a.product_id = b.product_id; - LOBを操作するPL/SQL関数:
1つの
dblink内のファンクションは、他のdblink内のLOBデータを操作できません。たとえば、次の文はサポートされていません。SELECT a.product_id FROM print_media@dbs1 a, print_media@dbs2 b WHERE CONTAINS@dbs1(b.ad_sourcetext, 'aa') >0; - 問合せブロック内の複数のLOB:
1つの問合せブロックに、異なる
dblinksの表および関数を含めることはできません。たとえば、次の文はサポート対象外SELECT a.product_id FROM print_media@dbs2 a, print_media@dbs3 b WHERE CONTAINS@dbs2(a.ad_sourcetext, 'aa') > 0 AND foo@dbs3(b.ad_sourcetext) > 0; -- foo is a user-defined function in dbs3 - LOBの演算子および列は、それらが
SELECTリスト、および結合問合せのwhere句にある場合にサポートされます。 - オラクル社が提供するPL/SQL関数およびプロシージャでは、LOBロケータを返すことができます。
- 一時LOBを返すSQL演算子は、リモートLOBのみでサポートされています。
- LOBを返すことができるのは、オラクル社が提供するビューのみです。
親トピック: 分散LOB