ITPub博客

首页 > 数据库 > 国内数据库 > YashanDB ST_DUMP函数

YashanDB ST_DUMP函数

国内数据库 作者:崖山数据库系统YashanDB 时间:2025-05-20 18:38:29 0 删除 编辑

ST_DUMP函数用于返回输入的Geometry对象的所有原子类型(Point、LineString、Polygon)及访问路径。

本函数返回一组geometry_dump类型的集合,每个geometry_dump包含:

  • geom属性:类型为ST_Geometry,表示输入geometry中的原子geometry。
  • path属性:integer类型的集合,表示从输入的geometry到该原子geometry的访问路径。

本函数遵守如下规则:

  • 当输入的参数存在NULL时,函数返回NULL。
  • 当输入的Geometry为原子类型时,返回的集合中只有一个元素,其中geom为原始输入的geometry,path为一个空的集合。
  • 当输入的Geometry为集合类型时,返回的集合中可能包含多个元素,其中每个元素的path为一个非空的integer集合。

geometry

通用表达式,其值必须为有效的ST_GEOMETRY类型的数据。

geometry_dump_set

ST_Dump返回值为geometry_dump_set类型。geometry_dump_set类型是一个集合类型,其声明如下:

CREATE OR REPLACE TYPE GEOMETRY_DUMP_SET AS TABLE OF GEOMETRY_DUMP;/
Copied!

path是一个成员为integer类型的集合类型,其声明如下:

CREATE OR REPLACE TYPE GEOMETRY_PATH AS TABLE OF INTEGER;/
Copied!

geometry_dump_set的成员为geometry_dump类型,geometry_dump类型为一个对象类型,其声明如下:

CREATE OR REPLACE TYPE GEOMETRY_DUMP AS OBJECT (path GEOMETRY_PATH,geom ST_GEOMETRY);/
Copied!

示例

SELECT st_astext(t2.geom, 0) FROM (SELECT st_dump(st_GeomFromText('point(0 0)')) DUMP FROM dual) t1, TABLE(t1.DUMP) t2;ST_ASTEXT(T2.GEOM,0)----------------------------------------------------------------POINT (0 0)SELECT st_astext(t2.geom, 0) FROM (SELECT st_dump(st_GeomFromText('multipoint(0 0, 1 1)')) DUMP FROM dual) t1, TABLE(t1.DUMP) t2;ST_ASTEXT(T2.GEOM,0)----------------------------------------------------------------POINT (0 0)POINT (1 1)SELECT st_astext(t2.geom, 0) FROM (SELECT st_dump(st_GeomFromText('geometrycollection(multipoint(0 0, 1 1), geometrycollection(point(2 2), linestring(3 3, 4 4), multipoint(5 5, 6 6)))')) DUMP FROM dual) t1, TABLE(t1.DUMP) t2;ST_ASTEXT(T2.GEOM,0)----------------------------------------------------------------POINT (0 0)POINT (1 1)POINT (2 2)LINESTRING (3 3, 4 4)POINT (5 5)POINT (6 6)--创建一个打印path的函数CREATE OR replace FUNCTION print_path(path MDSYS.GEOMETRY_PATH) RETURN VARCHAR IS 
    pathStr VARCHAR(32000);
    i int;BEGIN
    IF path IS null THEN
        RETURN null;END IF;
    
    pathStr := '{';FOR i IN 1..path.count LOOP
        IF i > 1 THEN
            pathStr := pathStr || ',';END IF;    
        pathStr := pathStr || path(i);END LOOP;
    pathStr := pathStr || '}';RETURN pathStr;END;/SELECT print_path(t2.path) path, st_astext(t2.geom, 0) geom FROM (SELECT st_dump(st_GeomFromText('point(0 0)')) DUMP FROM dual) t1, TABLE(t1.DUMP) t2;PATH                                                             GEOM                                                   
---------------------------------------------------------------- ----------------------------------------------------------------{}                                                               POINT (0 0)                                            SELECT print_path(t2.path) path, st_astext(t2.geom, 0) geom FROM (SELECT st_dump(st_GeomFromText('multipoint(0 0, 1 1)')) DUMP FROM dual) t1, TABLE(t1.DUMP) t2;PATH                                                             GEOM                                                   
---------------------------------------------------------------- ----------------------------------------------------------------{1}                                                              POINT (0 0)                                            {2}                                                              POINT (1 1)                                            SELECT print_path(t2.path) path, st_astext(t2.geom, 0) geom FROM (SELECT st_dump(st_GeomFromText('geometrycollection(multipoint(0 0, 1 1), geometrycollection(point(2 2), linestring(3 3, 4 4), multipoint(5 5, 6 6)))')) DUMP FROM dual) t1, TABLE(t1.DUMP) t2;PATH                                                             GEOM                                                   
---------------------------------------------------------------- ----------------------------------------------------------------{1,1}                                                            POINT (0 0)                                            {1,2}                                                            POINT (1 1)                                            {2,1}                                                            POINT (2 2)                                            {2,2}                                                            LINESTRING (3 3, 4 4)                                  {2,3,1}                                                          POINT (5 5)                                            {2,3,2}                                                          POINT (6 6)


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3084859/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    639825