MDSYS.SDO_GEOR_UTLパッケージには、GeoRasterに関連するユーティリティ操作を行うためのサブプログラム(ファンクションおよびプロシージャ)が含まれています。この章では、そのサブプログラムのリファレンス情報を、例を使用して説明します。
構文
SDO_GEOR_UTL.calcRasterNominalSize(
geor IN SDO_GEORASTER,
padding IN VARCHAR2 DEFAULT 'TRUE',
pyramid IN VARCHAR2 DEFAULT 'TRUE',
bitmapMask IN VARCHAR2 DEFAULT 'TRUE'
) RETURN NUMBER;
説明
GeoRasterオブジェクトが圧縮されておらず空のラスター・ブロックが含まれていないものとして、GeoRasterオブジェクトのラスター・ブロックの合計長(バイト単位)を戻します。
パラメータ
GeoRasterオブジェクトを指定します。
文字列TRUE
(デフォルト)を指定すると、ラスター・ブロック内の埋込みが考慮されます。文字列FALSE
を指定すると、ラスター・ブロック内の埋込みは考慮されません。
文字列TRUE
(デフォルト)を指定すると、ピラミッドのサイズが考慮されます。文字列FALSE
を指定すると、ピラミッドのサイズは考慮されません。
文字列TRUE
(デフォルト)を指定すると、関連付けられたビットマップ・マスクが考慮されます。文字列FALSE
を指定すると、関連付けられたビットマップ・マスクは考慮されません。ビットマップ・マスクの詳細は、1.8項を参照してください。
使用上の注意
このファンクションでは、LOB記憶域のオーバーヘッドが考慮されないため、結果はGeoRasterオブジェクトに実際に必要な記憶域の近似値となります。
このファンクションの結果は、同じGeoRasterオブジェクトでのSDO_GEOR_UTL.calcRasterStorageSizeファンクションの結果と同じか、またはそれ以上の値になります。このファンクションによって、同じGeoRasterオブジェクトのSDO_GEOR_UTL.calcRasterStorageSizeファンクションより大きな値が戻された場合、これらの値の差は、圧縮または空のラスター・ブロック、あるいはその両方を使用することによって節約された領域を反映しています。
GeoRasterの圧縮の詳細は、1.10項を参照してください。
例
次の例では、現行のブロック化方法に基づいて、GeoRasterオブジェクトの名目上のラスター・サイズ(バイト単位)を計算します。戻されるサイズには、(デフォルトで)ラスター・ブロック内の埋込み、関連付けられたビットマップ・マスクおよびピラミッドが含まれています。
SELECT SDO_GEOR_UTL.calcRasterNominalSize(georaster) nsize FROM georaster_table WHERE georid=1; NSIZE ---------- 289150
構文
SDO_GEOR_UTL.calcRasterStorageSize(
geor IN SDO_GEORASTER
) RETURN NUMBER;
説明
GeoRasterオブジェクトのすべてのラスター・ブロックの実際の長さ(バイト単位)を戻します。
パラメータ
GeoRasterオブジェクトを指定します。
使用上の注意
このファンクションは、GeoRasterオブジェクトのすべてのラスター・ブロックの実際の長さを計算します。このファンクションでは、LOB記憶域のオーバーヘッドが考慮されないため、結果はGeoRasterオブジェクトの実際の記憶域サイズの近似値となります。基本的に、このファンクションは次の文を実行します。
EXECUTE IMMEDIATE 'SELECT SUM(DBMS_LOB.getLength(rasterBlock)) FROM ' || geor.rasterDataTable || ' WHERE rasterId=' || geor.rasterId;
このファンクションの結果は、同じGeoRasterオブジェクトのSDO_GEOR_UTL.calcRasterNominalSizeファンクションの結果と同じか、またはそれ以下の値になります。このファンクションによって、同じGeoRasterオブジェクトのSDO_GEOR_UTL.calcRasterNominalSizeファンクションより小さな値が戻された場合、これらの値の差は、圧縮または空のラスター・ブロック、あるいはその両方を使用することによって節約された領域を反映します。
例
次の例では、指定したGeoRasterオブジェクトの実際のサイズと名目上のサイズの比率を(小数として)計算します。この例では、実際のサイズは名目上のサイズの約20分の1(1/20)です。
SELECT SDO_GEOR_UTL.calcRasterStorageSize(georaster)/ SDO_GEOR_UTL.calcRasterNominalSize(georaster) ratio FROM georaster_table WHERE georid=1; RATIO ---------- .056198816
構文
SDO_GEOR_UTL.createDMLTrigger(
tableName VARCHAR2,
columnName VARCHAR2);
説明
GeoRaster表のGeoRaster列に、必要な標準のGeoRasterデータ操作言語(DML)トリガーを作成します。これによって、そのDMLに関連付けられたトリガーが起動された際に、適切な操作が実行されます。
パラメータ
GeoRaster表(GeoRasterオブジェクト列が1列以上存在する行が含まれる表)の名前を指定します。
GeoRaster表内のSDO_GEORASTER型の列の名前を指定します。
使用上の注意
GeoRasterデータ構造の参照整合性を保持するには、GeoRaster表に任意のDML操作を実行する前に、常にこのプロシージャを使用して、そのGeoRaster表とGeoRaster列の各組合せに標準のGeoRaster DMLトリガーを作成する必要があります。たとえば、GeoRaster表に2つのGeoRaster列が含まれている場合、このプロシージャを2回コールします。各コールでは、適切な表名と列名を指定します。
標準のGeoRaster DMLトリガーの詳細(このトリガーが実行する操作を含む)は、3.1.3項を参照してください。
例
次の例では、GEOR_COLという名前のGeoRaster列を含むXYZ_GEOR_TABという名前の表に、標準のGeoRaster DMLトリガーを作成します。
EXECUTE sdo_geor_utl.createDMLTrigger('XYZ_GEOR_TAB', 'GEOR_COL');
構文
SDO_GEOR_UTL.makeRDTNamesUnique;
説明
名前が一意でない既存のラスター・データ表の名前を変更し、データベース内ですべてのラスター・データ表の名前が一意になるようにします。また、新しい名前が反映されるよう、GeoRasterシステム・データおよび影響を受けるGeoRasterのすべてのオブジェクトを更新します。
パラメータ
なし
使用上の注意
1つ以上のラスター・データ表に(異なるスキーマで)同じ名前が定義されている場合は、このプロシージャか、SDO_GEOR_UTL.renameRDTプロシージャ、または両方を使用して重複を解消できます。
DBAロールでデータベースに接続する際に、このプロシージャを実行します。
このプロシージャはトランザクションではないため、結果はロールバックできません。
例
次の例では、名前が一意でない既存のラスター・データ表の名前を自動的に変更し、データベース内ですべてのラスター・データ表の名前が一意になるようにします。また、新しい名前が反映されるよう、GeoRasterシステム・データおよび影響を受けるGeoRasterのすべてのオブジェクトを更新します。
EXECUTE sdo_geor_utl.makeRDTNamesUnique;
構文
SDO_GEOR_UTL.renameRDT(
oldRDTs VARCHAR2,
newRDTs VARCHAR2 DEFAULT NULL);
説明
現行ユーザーが所有する1つ以上の既存のラスター・データ表の名前を変更し、その新しい名前が反映されるように、GeoRasterシステム・データおよび影響を受けるGeoRasterのすべてのオブジェクトを更新します。
パラメータ
名前を変更するラスター・データ表の名前を指定します。複数の表を指定する場合は、カンマ区切りリストを使用します。
oldRDTs
で指定されたラスター・データ表に割り当てる新しい名前を指定します。複数の表を指定する場合は、カンマ区切りリストを使用します。指定する順序は、oldRDTs
で指定した名前と正確に対応するようにします。このパラメータにNULLを指定すると、GeoRasterは入力されたそれぞれのラスター・データ表に対して新しい一意の名前を割り当てます。
使用上の注意
別のユーザーが所有する1つ以上のラスター・データ表に同じ名前が定義されている場合は、このプロシージャか、SDO_GEOR_UTL.makeRDTNamesUniqueプロシージャ、または両方を使用して重複を解消できます。
このプロシージャを使用する前に、ラスター・データ表の所有者としてデータベースに接続する必要があります。このプロシージャでは、他のユーザーが所有しているラスター・データ表の名前を変更することはできません。
oldRDTs
のいずれの表もGeoRasterシステム・データに含まれていない場合、その表は無視されます。
newRDTs
のいずれかの表がGeoRasterシステム・データの名前と競合する場合、または現行ユーザーが所有している他のオブジェクトの名前と競合する場合は、例外が発生します。
このプロシージャはトランザクションではないため、結果はロールバックできません。
例
次の例では、ラスター・データ表RDT_1およびRDT_2の名前を、それぞれST_RDT_1およびST_RDT_2に変更します。
EXECUTE sdo_geor_utl.renameRDT('RDT_1,RDT_2','ST_RDT_1,ST_RDT_2');