【问题标题】:Oracle spatial operator SDO_JOIN returns ORA-01722 invalid numberOracle 空间运算符 SDO_JOIN 返回 ORA-01722 无效数字
【发布时间】:2023-04-05 16:51:01
【问题描述】:

首先,我在 user_sdo_geom_metadata 中为两个表“test_katt”和“test_del_ko”创建了元数据。每个表都有一个唯一的 id (featureid)。一张桌子有点几何,另一张有多边形。

--例子

insert into user_sdo_geom_metadata (table_name, column_name, diminfo,srid) values (
    'test_katt',  --table name
    'geometry',         
    SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Y',365000,627000,0.005), --box
    SDO_DIM_ELEMENT('X',28000,195000,0.005)), --box
    null
  );

其次:我为两个表都创建了空间索引:

create index test_katt_idx 
          on test_katt (geometry) indextype is mdsys.spatial_index;

最后,我想基于任何空间交互连接来自“test_katt”中点的数据和来自“test_del_ko”中多边形的数据。结果:错误报告 - ORA-01722: invalid number

select *   
from test_del_ko dk, test_katt ka,  
                table (SDO_JOIN('test_del_ko', 'geometry',   
                'test_katt', 'geometry',   
                'mask = anyinteract') )a  
where a.rowid1 = dk.featureid  
and a.rowid2 = ka.featureid;

我还没有成功地使用 SDO_JOIN 创建结果,因此任何有关该过程的帮助都会非常有帮助。我们有 oracle 12 数据库。

【问题讨论】:

  • edit 提供完整的minimal reproducible example 问题,包括ALL 表的DDL 语句,包括CREATE TABLECREATE INDEX,插入到元数据表中所有您正在使用的表和一些INSERT 语句以及一些代表问题的示例数据。然后,如果人们想帮助您,他们有一个可以运行的脚本,而不必尝试将您的代码逆向工程为可以运行的东西。请帮助我们为您提供帮助。

标签: sql oracle spatial-query oracle-spatial


【解决方案1】:

在您的查询中,a.rowid1 和 a.rowid2 是 varchar2 格式的 oracle rowid,您将它们与表中的 featureid 列进行比较,我想它们是数字。这就是你有错误的原因。请改用此查询:

select *   
from test_del_ko dk, test_katt ka,  
                table (SDO_JOIN('test_del_ko', 'geometry',   
                'test_katt', 'geometry',   
                'mask = anyinteract') )a  
where a.rowid1 = dk.rowid  
and a.rowid2 = ka.rowid;

【讨论】:

  • 非常感谢,非常感谢。现在它就像一个魅力。这正是我对这个 rowid 的不理解。
猜你喜欢
  • 1970-01-01
  • 2018-06-25
  • 2021-03-20
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
相关资源
最近更新 更多