Oracle 空间运算符 SDO_JOIN returns ORA-01722 数字无效
Oracle spatial operator SDO_JOIN returns ORA-01722 invalid number
首先,我在 user_sdo_geom_metadata 中为两个 table 'test_katt' 和 'test_del_ko' 创建了元数据。每个 table 都有一个唯一的 id (featureid)。一个 table 有点几何,另一个有多边形。
--例子
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
);
其次:我为两个 tables 创建了一个空间索引:
create index test_katt_idx
on test_katt (geometry) indextype is mdsys.spatial_index;
最后,我想根据任何空间交互连接来自 'test_katt' 中的点的数据和来自 'test_del_ko' 中的多边形的数据。结果:错误报告 - ORA-01722:无效数字
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 数据库。
在您的查询中,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;
首先,我在 user_sdo_geom_metadata 中为两个 table 'test_katt' 和 'test_del_ko' 创建了元数据。每个 table 都有一个唯一的 id (featureid)。一个 table 有点几何,另一个有多边形。
--例子
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
);
其次:我为两个 tables 创建了一个空间索引:
create index test_katt_idx
on test_katt (geometry) indextype is mdsys.spatial_index;
最后,我想根据任何空间交互连接来自 'test_katt' 中的点的数据和来自 'test_del_ko' 中的多边形的数据。结果:错误报告 - ORA-01722:无效数字
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 数据库。
在您的查询中,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;