12.7 SDO_GEOR_RA.rasterUpdate

形式

SDO_GEOR_RA.rasterUpdate(
     geoRaster     IN OUT SDO_GEORASTER, 
     pyramidLevel  IN NUMBER, 
     conditions    IN SDO_STRING2_ARRAY, 
     vals          IN SDO_STRING2_ARRAYSET, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.rasterUpdate(
     geoRaster     IN OUT SDO_GEORASTER, 
     pyramidLevel  IN NUMBER, 
     targetArea    IN SDO_NUMBER_ARRAY, 
     conditions    IN SDO_STRING2_ARRAY, 
     vals          IN SDO_STRING2_ARRAYSET, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.rasterUpdate(
     geoRaster     IN OUT SDO_GEORASTER, 
     pyramidLevel  IN NUMBER, 
     targetArea    IN SDO_GEOMETRY, 
     conditions    IN SDO_STRING2_ARRAY, 
     vals          IN SDO_STRING2_ARRAYSET, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     polygonClip   IN VARCHAR2 DEFAULT 'FALSE',
     parallelParam IN VARCHAR2 DEFAULT NULL);

説明

valsの指定から計算された値を使用して、conditionsの指定がTRUEのすべてのセルを更新します。

パラメータ

geoRaster

入力および出力で使用されるGeoRasterオブジェクトを指定します(更新は指定した条件に基づきます)。

pyramidLevel

更新するピラミッド・レベルを指定します。このパラメータがNULLの場合、すべてのピラミッド・レベルが更新されます。

targetArea

ターゲット領域の定義です。データ型がSDO_GEOMETRYであり、パラメータpolygonClipTRUEである場合、ターゲット領域ジオメトリ内のセルのみが更新され、ターゲット領域ジオメトリ外のすべてのセルは元の値を保持しますが、パラメータpolygonClipFALSEである場合はターゲット領域ジオメトリのMBRのすべてのセルが更新されます。

データ型がSDO_NUMBER_ARRAYの場合、このパラメータで矩形ウィンドウの左上の座標(行,列)と右下の座標(行,列)を指定することによって、ラスター空間が想定されます。

conditions

セルを選択するために使用するbooleanExpr式文字列の配列を指定します。(詳細は、「使用上のノート」を参照してください。)データ型はSDO_STRING2_ARRAYで、VARRAY(2147483647) OF VARCHAR2(4096)として定義されます。

vals

各条件に対応する外部配列と各レイヤーに対応する内部配列を持つarithmeticExpr式の1つ以上の配列を指定します。データ型はSDO_STRING2_ARRAYSETで、VARRAY(2147483647) OF SDO_STRING2_ARRAYとして定義されます。

bgValues

入力GeoRasterオブジェクトの空のラスター・ブロックでセルの値を表す背景値を指定します。SDO_NUMBER_ARRAYオブジェクト内の要素の数は、1つ(すべてのバンドに同じ入力値を使用)またはバンド次元のサイズ(各バンドにそれぞれ異なる入力値を使用)のいずれかであることが必要です。たとえば、SDO_NUMBER_ARRAY(1,5,10)では、1番目のバンドに1、2番目のバンドに5、3番目のバンドに10が入力されます。デフォルトのbgValuesは0 (ゼロ)です。

入力値は、スパース・データへの入力用としてターゲットのセル深度の背景値で指定された有効なセル値であることが必要です。

nodata

文字列TRUEは、GeoRasterオブジェクトのNODATAセルの元の値が更新されず、NODATA値がconditionsパラメータの評価で考慮されることを意味します。conditionsパラメータの評価に関与するセル値にNODATA値がある場合、conditionsパラメータはFALSEとして評価されます(conditionsパラメータに関する使用上のノートを参照)。文字列FALSE (デフォルト)では、NODATA値を含むセルが通常のセルとみなされるため、更新対象になります。NODATA値および値の範囲の詳細は、「NODATA値および値の範囲」を参照してください。

polygonClip

targetAreaがNULLの場合は無視されます。それ以外の場合、文字列TRUEでは、targetAreaジオメトリ値がラスター・セル値の更新で使用されますが、文字列FALSEまたはNULL値では、targetAreaジオメトリのMBRがラスター・セル値の更新で使用されます。

parallelParam

操作の並列度を指定します。指定する場合、parallel=nという形式である必要があります(nは1より大きい)。データベース・オプティマイザでは、このパラメータによって指定された並列度を使用します。指定しない場合、デフォルトでパラレル処理は行われません。(詳細は、「GeoRasterでのパラレル処理」を参照してください。)

parallelParamを指定すると、このプロシージャの結果をロールバックできません(「使用上のノート」を参照)。

使用上のノート

このプロシージャは、入力されたGeoRasterオブジェクトのデータを上書きするため、元のGeoRasterオブジェクトをコピーし、そのコピーしたオブジェクトに対してこのプロシージャを使用してください。このプロシージャの結果を確認してから、必要に応じて元のGeoRasterオブジェクトを廃棄します。

このプロシージャでは、conditionsパラメータに指定されたbooleanExpr文字列に基づいて、指定されたGeoRasterオブジェクトからセルを選択し、valsパラメータに指定されたarithmeticExpr式文字列を計算して対応するセル値を更新します。たとえば、次の場合を検討します:

conditions = SDO_STRING2_ARRAY('{0}=48','{0}=108')
vals = SDO_STRING2_ARRAYSET(SDO_STRING2_ARRAY('123','54','89'),SDO_STRING2_ARRAY('98','56','123'))

この場合、次のようになります:

  • 1番目のレイヤーの値が48に等しいすべてのセルで、その1番目、2番目、3番目のレイヤーの値がそれぞれ123、54、89に設定されます。

  • 1番目のレイヤーの値が108に等しいすべてのセルで、その1番目、2番目、3番目のレイヤーの値がそれぞれ98、56、123に設定されます。

詳細は、「ラスター代数言語」を参照してください。

parallelParamを指定すると、プロシージャのいくつかの実行単位は、自律型トランザクションとして実行され、プロシージャの実行中に一部の変更はコミットされるため、それらの変更はロールバックできません。このパラメータを指定しない場合、すべての変更をロールバックできます。

次の例では、valsの指定から計算された値を使用して、conditionsの指定がTRUEのすべてのセルを更新します。

DECLARE 
  geor SDO_GEORASTER;
BEGIN
  select georaster into geor from georaster_table where georid = 1;
  sdo_geor_ra.rasterUpdate(geor,0,SDO_STRING2_ARRAY('(abs({0}-{1})=48)&({2}-{1}=-101)','2*{0}-{1}/3=108'),SDO_STRING2_ARRAYSET(SDO_STRING2_ARRAY('123','54','89'),SDO_STRING2_ARRAY('98','56','123')));
END;
/