首页 > 解决方案 > Oracle PL/SQL - 返回表跳过抛出错误的记录

问题描述

我正在运行以下查询:

SELECT SDO_UTIL.TO_WKBGEOMETRY (GEOMETRY),
       S_ROUTE,
       BLOCK_ID
  FROM GEOM_TABLE;

GEOMETRY类型在哪里SDO_GEOMETRY。问题是,当我运行此查询时,我会收到以下错误,我认为这是在我对数据库中错误指定的记录使用时发生SDO_UTIL.TO_WKBGEOMETRYGEOMETRY

ORA-29532: Java call terminated by uncaught Java exception: java.lang.RuntimeException: oracle.spatial.util.GeometryExceptionWithContext: For GTYPE_MULTICURVE, interpretation should be 1 or 2

我想编写一个简单地跳过导致抛出此错误的记录的查询(即返回一个表,该表包含 GEOM_TABLE 中的所有行,但抛出错误的行除外)。我是 PL/SQL 的新手,并尝试了几个涉及循环和异常的查询,但我无法让这些工作。

标签: sqloracleplsqlgeospatial

解决方案


您应该能够将您正在调用的函数包装在另一个捕获并吞下错误的函数中。就像是:

CREATE FUNCTION to_wkbgeometry_silent (geometry IN SDO_GEOMETRY)
    RETURN BLOB IS
BEGIN
    RETURN SDO_UTIL.to_wkbgeometry (geometry);
EXCEPTION
    WHEN OTHERS THEN
        RETURN NULL;
END to_wkbgeometry_silent;

然后使用子查询过滤掉错误,避免两次调用该函数:

SELECT *
FROM   (SELECT to_wkbgeometry_silent (geometry) AS geo, s_route, block_id
        FROM   geom_table)
WHERE  geo IS NOT NULL;

(不过,显然你最好捕捉并忽略你想忽略的特定错误,而不是所有错误。)


推荐阅读