您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

HANA 空间支持

SQLScript 支持空间数据类型 ST_GEOMETRY 和 SQL 空间函数来访问和操作空间数据。此外,SQLScript 还支持某些 SQL 空间函数所需的目标样式函数调用。

以下示例说明了在 SQLScript 中使用空间数据类型和函数的小场景。

函数 get_distance 使用空间函数 ST_DISTANCE 计算类型为 ST_GEOMETRY 的两个给定参数 之间的距离。

需要变量 前面的“:”,因为您正在从变量中读取。

函数 get_distance 本身由过程 nested_call 调用。该过程返回 ST_GEOMETRY 变量 的距离和文本表示。

CREATE FUNCTION get_distance( IN first ST_GEOMETRY, IN second ST_GEOMETRY )

RETURNS distance double

AS

BEGIN

distance = :first.st_distance(:second);

END;

CREATE PROCEDURE nested_call( IN first ST_GEOMETRY,

IN second ST_GEOMETRY,

OUT distance double,

OUT res3 CLOB

)

AS

BEGIN

Distance = get_distance (:first, :second);

res3 = :first.st_astext();

END;

过程调用

CALL nested_call(   first    => st_geomfromtext('Point(7 48)'),

second => st_geomfromtext('Point(2 55)'),

distance => ?,

res3 => ?);

返回以下结果:

Out(1) Out(2)

8,602325267042627 POINT(7 48)

请注意,如果在 SQLScript 中使用 函数,则 SQL 空间函数中的可选 SRID(空间参考标识符)参数是必需的。如果未指定 SRID,则会收到错误,如以下示例中的函数 ST_GEOMFROMTEXT 所示。其中,SRID 0 用于指定缺省空间参照系。

DO 

BEGIN

DECLARE arr ST_GEOMETRY ARRAY;

DECLARE line1 ST_GEOMETRY = ST_GEOMFROMTEXT('LINESTRING(1 1, 2 2, 5 5)', 0);

DECLARE line2 ST_GEOMETRY = ST_GEOMFROMTEXT('LINESTRING(1 1, 3 3, 5 5)', 0);

arr[1] = :line1;

arr[2] = :line2;

tmp2 = UNNEST(:arr) AS (A);

select A from :tmp2;

END;

如果不对 ST_GEOMETRY 变量 使用相同的 SRID,UNNEST 将返回错误,因为不允许一列中的值具有不同的 SRID。

此外,还会对输出表变量进行一致性检查,以确保空间列的所有元素都具有相同的 SRID。

备注 SQLScript 中当前不支持以下功能: ST_CLUSTERIDST_CLUSTERCENTEROIDST_CLUSTERENVELOPEST_CLUSTERCONVEXHULLST_AsSVG

SQLScript 也不支持使用 NEW 关键字构建对象。您可以改用 ST_GEOMFROMTEXT(‘POINT(1 1)’, srid)。

有关 SQL 空间函数及其用法的详细信息,请参阅 SAP HANA 平台 上的 SAP HANA 空间参考。