当前位置: 首页 > 知识库问答 >
问题:

Oracle:从MDSYS.SDO_GEOMETRY列提取数据

戚阳文
2023-03-14

我有一个表格,我需要提取一些信息。这个表有一个oracle spatial (MDSYS。SDO_GEOMETRY)列,从中我也需要一些数据。

我从一个简单的查询开始,如下所示:

select id, field1, field2
FROM my_table;

在那之后,我能够循环结果以提取空间列中的数据:

SELECT *
        FROM TABLE  (SELECT a.POSITIONMAP.sdo_ordinates
                          FROM my_table
                          WHERE ID = 18742084);

位置图。sdo_

100050,887
407294,948
0,577464740471056
-0,816415625470689

我需要最后2个值。我可以通过将查询更改为以下内容来实现:

SELECT * FROM
    (SELECT rownum AS num,
            column_value AS orientatie
        FROM TABLE  (SELECT a.POSITIONMAP.sdo_ordinates
                          FROM my_table
                          WHERE ID = 18742084))
    WHERE num IN (3,4)

在第一次查询的每一行上循环以从POSITIONMAP列中提取数据当然不是很好的性能友好,因此我的查询很快就会变慢。

我想在一个查询中检索所有信息,但有一些事情阻止我这样做。

    < li >并非表中的每一行都有POSITIONMAP中的数据 < li >有些行在POSITIONMAP中有数据,但它们只包含2个值(因此不是我要找的第3个和第4个值。 < li >我需要表中每一行的数据都在一行中(使用前面的查询会导致重复的行)

我得到的最接近的是:

select
  id,
  field1, 
  field2
  t.*
  FROM my_table v,
  table (v.POSITIONMAP.sdo_ordinates) t

这为my_table中的每一行提供了4行。一旦我尝试将rownum条件放入此查询中,我就收到一个错误:“无效的user.table.column,table.column或列规范”

有没有办法将我想做的事情合并到1个查询中?

共有2个答案

雷硕
2023-03-14

一种方法是使用< code>ROW_NUMBER()分析函数:

SELECT *
FROM   (
  select id,
         field1, 
         field2,
         t.*,
         ROW_NUMBER() OVER ( PARTITION BY v.id ORDER BY ROWNUM ) AS rn
  FROM   my_table v,
         TABLE( v.POSITIONMAP.sdo_ordinates ) t
)
WHERE  rn IN ( 3, 4 )
席安康
2023-03-14

您可以按如下方式使用sdo_util.getvertices:

select t.x,t.y
  from my_table mt
      ,table(sdo_util.getvertices(mt.positionmap)) t
 where t.id = 2

我假设您的几何是线(gtype=2002)和点(gtype=2001)。如果您想要线的X、Y值和点的空值,您可以过滤几何对象的sdo_gtype属性。

select t.x,t.y
  from my_table mt
      ,table(sdo_util.getvertices(mt.positionmap)) t
 where t.id = 2
 and mt.positionmap.sdo_gtype=2002
 union all
 select null as X,
        null as Y
 from my_table mt
 where mt.positionmap.sdo_gtype=2001
 类似资料:
  • 问题内容: 我有一个包含6列的R数据框,并且我想创建一个仅包含三列的新数据框。 假设我的数据帧df,我想提列A,B和E,这是唯一的命令,我可以计算出: 有没有更紧凑的方法可以做到这一点? 问题答案: 如果您的data.frame被调用,则使用dplyr包df1: 也可以在不使用%>%管道的情况下将其写为:

  • 问题内容: 我想从具有存储为clob的XML列为testclob的表TRAPTABCLOB中使用sql提取Decision的值。 样本XML如下。 问题答案: 尝试 这是一个sqlfiddle演示

  • 我试图从包含列表的json中提取一个字段,然后将该列表附加到数据帧中,但遇到了一些不同的错误。 我想我可以将其写入csv,然后用Pandas读取csv,但我尽量避免写入任何文件。我知道我也可以使用StringIO生成csv,但这存在空字节问题。替换这些将是(我认为)另一个逐行的步骤,这将进一步延长脚本完成所需的时间。。。我正在对一个返回成千上万个结果的查询运行此操作,因此保持它的快速和简单是一个优

  • 我有一个从甲骨文获取数据并上传到谷歌云存储的需求。 我正在使用executeSql proecssor,但是对于大表来说它是失败的,甚至对于有大约45MB大小的100万条记录的表来说,它需要花费2小时来提取。 使用restapi将表名传递给listenHttp,Listenhtp将表名传递给ExecutesQL。我不能使用QueryDatabase,因为表的数量是动态的,启动获取的调用也是动态的,

  • 如何从CSV文件中提取列? 我对Java有点陌生。你如何从csv文件中提取特定列。例如,如果我有这个数据: 如何提取第一列和第三列?我能够读取整个CSV文件,但我想从中提取特定的列。

  • 问题内容: 我知道它是一个数组,但是我对JSON完全陌生,需要帮助理解它的结构,这是我提取数据的尝试: 我拥有的JSON数据如下所示: 我对这些东西的掌握并不强,因此感谢所有帮助。 问题答案: 这是个主意: 它应该可以工作(如果有编译错误,请随时投诉)