4.12 クロススキーマ操作の実行

すべてのGeoRaster操作は、現行の接続スキーマ以外のスキーマに定義されているGeoRasterオブジェクトに対して機能できます。つまり、GeoRasterは、クロススキーマのアクセス、更新および処理を完全にサポートします。

詳細は、「GeoRasterにおけるクロススキーマのサポート」を参照してください。

例4-2 クロススキーマ・コピー操作

次の例では、USER2は、USER1からイメージのコピーを作成し、USER2スキーマに格納します。USER1がGEORASTER_TABLE表を所有し、USER2がG_TABLE表を所有していると仮定します。

--connect to user1 and grant permissons to user2
--assume user1 stores the image in georaster_table and the image’s RDT table is rdt_1 
conn user1/pswd1
 grant select on georaster_table to user2;
grant select on rdt_1 to user2;

--connect to user2 and make a copy of a georaster from user1
conn user2/pswd2
SQL> DECLARE
   gr1 sdo_georaster;
   gr2 sdo_georaster;
BEGIN
   --select the image from georaster_table in user1
   select georaster into gr1 from user1.georaster_table where georid = 100;
   -- the copy is to be stored in g_table in user2, assuming the georaster object is already initiated
   select geor into gr2 from g_table where id = 1 for update;
   sdo_geor.changeFormatCopy(gr1, 'blocking=OPTIMALPADDING blocksize=(512,512,3) interleaving=BIP', gr2);
   update g_table set geor=gr2 where id=1;
   commit;
END;
/ 

例4-3 クロススキーマ・ラスター代数およびコピー操作

次の例では、USER2は、USER1スキーマのイメージのラスター代数操作を実行し、USER1に結果を格納します。USER1がGEORASTER_TABLEおよびG_TABLE表の両方を所有していると仮定します。既存のイメージはGEORASTER_TABLEに存在し、イメージのラスター・データ表はRDT_1です。結果のイメージはG_TABLEに格納され、そのラスター・データ表はRDT_2です。

--connect to user1 and grant permissons to user2
conn user1/pswd1
grant select on georaster_table to user2;
grant select on rdt_1 to user2;
grant select, update, insert, delete on g_table to user2;
grant select, update, insert, delete on rdt_2 to user2;

--connect to user2 and run a raster algebra operation on an image in user1 
conn user2/pswd2
DECLARE
   gr1 sdo_georaster;
   gr2 sdo_georaster;
BEGIN
   --select the image from georaster_table in user1
   select georaster into gr1 from user1.georaster_table where georid = 100;
   -- the result is to be stored in g_table in user1, assuming the georaster object is already initiated
   select geor into gr2 from user1.g_table where id = 1 for update;
   sdo_geor_ra.rasterMathOp(gr1,sdo_string2_array('{0}','{1}','{2}'), 'blocking=OPTIMALPADDING blocksize=(512,512,3) interleaving=BIP',gr2);
   update user1.g_table set geor=gr2 where id=1;
   commit;
END;
/