首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Oracle PL/SQL -跳过抛出错误的记录的返回表

Oracle PL/SQL -跳过抛出错误的记录的返回表
EN

Stack Overflow用户
提问于 2018-10-29 23:08:44
回答 2查看 133关注 0票数 0

我正在运行以下查询:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT SDO_UTIL.TO_WKBGEOMETRY (GEOMETRY),
       S_ROUTE,
       BLOCK_ID
  FROM GEOM_TABLE;

其中GEOMETRYSDO_GEOMETRY类型。问题是,当我运行这个查询时,我得到了以下错误,我认为当我在数据库中错误指定的GEOMETRY记录上使用SDO_UTIL.TO_WKBGEOMETRY时,就会发生这种错误。

代码语言:javascript
代码运行次数:0
运行
复制
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的新手,曾经尝试过几次涉及循环和异常的查询,但我都没能让它们正常工作。

EN

回答 2

Stack Overflow用户

发布于 2018-10-29 23:59:04

您应该能够将所调用的函数包装在另一个函数中,以捕获并接受错误。类似于:

代码语言:javascript
代码运行次数:0
运行
复制
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;

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

代码语言:javascript
代码运行次数:0
运行
复制
SELECT *
FROM   (SELECT to_wkbgeometry_silent (geometry) AS geo, s_route, block_id
        FROM   geom_table)
WHERE  geo IS NOT NULL;

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

票数 1
EN

Stack Overflow用户

发布于 2018-10-29 23:25:06

我不知道如何跳过错误,但您可以使用CASE来避免它们

代码语言:javascript
代码运行次数:0
运行
复制
SELECT CASE GEOMETRY WHEN 1 THEN 1 WHEN 2 THEN 2 ELSE NULL END
  FROM (SELECT 1 AS GEOMETRY FROM DUAL -- Fake Table
        UNION ALL
        SELECT 2 AS GEOMETRY FROM DUAL
        UNION ALL
        SELECT 3 AS GEOMETRY FROM DUAL);

在您的示例中:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT 
    CASE GEOMETRY WHEN 1 THEN SDO_UTIL.TO_WKBGEOMETRY(GEOMETRY) WHEN 2 THEN SDO_UTIL.TO_WKBGEOMETRY(GEOMETRY) ELSE NULL END,
    S_ROUTE, 
    BLOCK_ID 
FROM GEOM_TABLE;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53048399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档