17.00 - 17.05 - FNC_GeomSetWKB - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

目的

GeometryのWKB (Well-Known Binary)表現を使用してGeometry型の値を設定します。

構文

void
FNC_GeomGetWKB(GEO_HANDLE      geoHandle,
               byte*           wkb,
               FNC_GeomSize_t  wkbSize,
               int             srid)
GEO_HANDLE geoHandle
UDF/UDMの戻り値であると定義されているか、または外部ストアド プロシージャに対するINOUT/OUTパラメータであると定義されている、ジオメトリ型へのハンドル。
byte* wkb
設定するWKB値へのポインタ。
FNC_GeomSize_t wkbSize
WKB値のバイト単位のサイズ。
int srid
設定するジオメトリの空間参照系の識別子。

使用上の注意

FNC_GeomSetWKBは、WKBバイト文字列を使用してジオメトリの値を設定します。ジオメトリに対して設定される、WKB文字列を含むwkbパラメータ、wkbSize、およびSRIDが入力として渡されます。

FNC_GeomSetWKBはインラインST_Geometry値に対してのみ呼び出す必要があります。LOBベースのST_Geometry値と使用されると、次の7579エラーが発生します: FNC_GeomSetWKBは、インラインのST_Geometry値に対してのみ有効です。

例: FNC_GeomGetWKBおよびFNC_GeomSetWKBを使用してジオメトリのWKBを取得および設定する

次のUDFはST_Geometryパラメータを入力として取り、WKB表現を取得し、それで戻りST_Geometry値を設定します。ジオメトリ サイズは小さく、読み取りには単一の読み取りで十分であると想定されます。

CREATE FUNCTION geomUDF3(P1 st_geometry)
RETURNS ST_GEOMETRY
NO SQL
PARAMETER STYLE SQL
DETERMINISTIC
LANGUAGE C
EXTERNAL NAME 'CS!geomUDF3!geomUDF3.c';

void geomUDF3(GEO_HANDLE* geom_handle,
              GEO_HANDLE* return_handle,
              int* indicator_thisGeom,
              int* indicator_returnValue,
              char    sqlstate[6],
              SQL_TEXT              extname[129],
              SQL_TEXT              specific_name[129],
              SQL_TEXT              error_message[257] )
{
     FNC_GeomSize_t geomsize;
     FNC_GeomSize_t bytesRead;
     FNC_GeomSize_t offset;
     FNC_GeomSize_t size;
     FNC_GeomSize_t wkbSize;
     byte* wkbBuffer;
     FNC_GeomSize_t wkbBufferSize;
     int srid;

    /* Get the Geometry WKT Size */
      geomsize = FNC_GeomGetWKBSize(*geom_handle); 

    /* Read the WKB value */
     wkbBuffer = (byte*)FNC_Malloc(geomsize);
     wkbBufferSize = geomsize;
     size = geomsize;
     offset = 0;    
     /* Get the WKB value */
      FNC_GeomGetWKB(*geom_handle,wkbBuffer, wkbBufferSize, 
 &wkbSize, &srid); 
                                                                                                                           
     /* Set the return value */
      FNC_GeomSetWKB(*return_handle, wkbBuffer, wkbSize,0); 
    *indicator_returnValue = 0;
     FNC_free(wkbBuffer);
}