文档解释
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;