ORA-54505: ring does not lie on a plane

文档解释

ORA-54505: ring does not lie on a plane

Cause: The ring was not flat.

Action: Make sure all of the vertices of the ring are on the same plane.

ORA-54505:环不在一个平面上

错误说明

ORA-54505是由Oracle Database中的一个Geometry对象用RING函数创建的圆环和不是用CIRCULARARC或ARC函数创建的圆环所引发的一个句法错误,当这个Geometry对象经过算术计算的结果不在一个平面时,Oracle就会报ORA-54505。

常见案例

当程序尝试从一个Geometry 对象中创建一个环时,可能会引发ORA-54505,以下示范代码将会抛出这个异常:

create table circle_test (id number, circle sdo_geometry);

insert into circle_test values(1001, sdo_geometry (2003, 8307, null, sdo_elem_info_array(1, 1003, 6), sdo_ordinate_array (20, 20, 22, 22, 20, 20)));

select sdo_ring.find_circle(circle) from circle_test;

— ORA-54505: Ring does not lie on a plane

解决方法

要解决ORA-54505错误,主要是通过正确使用RING、CIRCULARARC以及ARC函数创建Geometry 对象。在上述示范代码中,可以使用RING和CIRCULARARC来创建圆环:

create table circle_test (id number, circle sdo_geometry);

insert into circle_test values(1001, sdo_geometry (2003, 8307, null,

sdo_elem_info_array(1, 4, 3),

sdo_ordinate_array (20, 20, 22, 22, 20, 20)));

— 使用RING

select sdo_ring.find_circle(circle) from circle_test;

— 使用CIRCULARARC

select sdo_circulararc.find_circle(circle) from circle_test;

此外,还可以使用ARCROTATE函数在较大的角度中旋转环,从而避免ORA-54505错误:

insert into circle_test values(1001, sdo_geometry (2003, 8307, null,

sdo_elem_info_array(1, 4, 9),

sdo_ordinate_array (20, 20, 22, 22, 22, 22, 20, 20, 22, 22)));

select sdo_arcrotate.find_circle(circle) from circle_test;

你可能感兴趣的