gpt4 book ai didi

oracle - Oracle函数错误: ORA-00932: inconsistent datatypes: expected CHAR got MDSYS.SDO.GEOMETRY

转载 作者:行者123 更新时间:2023-12-02 10:57:43 24 4
gpt4 key购买 nike

我正在尝试创建一个要从网络 map 调用的函数(在数据库级别)。该功能使用户单击某个点时,也可以选择/突出显示关联的区域(多边形)。点和区域通过称为code的列中的值在属性级别上关联(eks。不在空间上)。

我创建了以下代码,但它返回错误:

ORA-00932: inconsistent datatypes: expected CHAR MDSYS.SDO_GEOMETRY (?)



码:
create or replace function region_select 
(
p_geom in sdo_geometry
)

RETURN SDO_GEOMETRY
DETERMINISTIC

IS
v_pointId number;
v_code number;
geom_out sdo_geometry;

BEGIN

select point_id into v_pointId from points where geom = p_geom;
select code into v_code from points where point_id = v_pointId;


if (v_pointId is not null)
then
select geom into geom_out from regions where code = v_code;
RETURN geom_out;
end if;

-- error handling
exception
when others then
raise_application_error(-20001,'An error was encountered - '||
sqlcode ||' -error- '|| sqlerrm);
rollback;
end;

最佳答案

首先,where geom = p_geom显示使用了空间选择(不是用于REGIONS,而是用于POINTS)-并且您无法使用where geom = p_geom检查几何相等性。您应该使用select point_id into v_pointId from points t where SDO_EQUALS(t.geom,p_geom) = 'TRUE'-前提是存在POINTS.geom的空间索引。如果不能有空间索引并且表POINTS很小,则可以使用where sdo_geom.relate(t.geom,'determine',p_geom)='EQUAL'-但速度会很慢...

其次,我同意@Alex Poole的观点,即这种错误处理不仅没有意义,而且有害。它的编写方式将导致错误(无论如何您都会得到该错误,但不会出现异常),但是您将丢失例如发生此错误的位置。首先,您应该摆脱它,运行代码,看看您是否对错误有更好的描述(CHAR MDSYS.SDO_GEOMETRY?在哪一行显示“CHAR”?)。如果您所得到的不再透露更多信息,我们将为您提供帮助...

附带说明一下,我不确定此函数是否确实是确定的-您必须确保它是确定的(为什么要这样声明它?这里的目的是什么?)。最后,最好将几何变量声明为“MDSYS.SDO_GEOMETRY”,而不仅仅是“SDO_GEOMETRY”-旧错误可能会再次咬住您...

HTH,让我知道您是否还有其他需要。

关于oracle - Oracle函数错误: ORA-00932: inconsistent datatypes: expected CHAR got MDSYS.SDO.GEOMETRY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56354631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com