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

标签 oracle function compiler-errors oracle-spatial

我正在尝试创建一个要从网络 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/

相关文章:

c# - 有没有办法确保从C#方法返回的值分配给变量?

java - 尝试引用同一包中另一个类中的 SteppingStone5_Recipe 类时,编译器显示 "cannot find symbol"错误消息

java.sql.SQLException : Invalid column index

database - ORA-00936 : missing expression. 向 oracle apex 中的子类型添加约束

PHP 在外部文件的类中调用函数,语法?

c - 不在 C 中打印函数的所有值

oracle - 将 RDS 数据导出到 S3/Glacier

oracle - 有没有办法在 Oracle Sql Developer 中找到用于创建用户的 ddl 脚本

javascript - 如何修复刽子手游戏中的开始功能

java - Map 和 orElse 返回不同的子类型