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。
备注 SQLScript 中当前不支持以下功能: ST_CLUSTERIDST_CLUSTERCENTEROIDST_CLUSTERENVELOPEST_CLUSTERCONVEXHULLST_AsSVG
SQLScript 也不支持使用 NEW 关键字构建对象。您可以改用 ST_GEOMFROMTEXT(‘POINT(1 1)’, srid)。
有关 SQL 空间函数及其用法的详细信息,请参阅 SAP HANA 平台 上的 SAP HANA 空间参考。