sql - Oracle PL/SQL - 返回表跳过抛出错误的记录
问题描述
我正在运行以下查询:
SELECT SDO_UTIL.TO_WKBGEOMETRY (GEOMETRY),
S_ROUTE,
BLOCK_ID
FROM GEOM_TABLE;
GEOMETRY
类型在哪里SDO_GEOMETRY
。问题是,当我运行此查询时,我会收到以下错误,我认为这是在我对数据库中错误指定的记录使用时发生SDO_UTIL.TO_WKBGEOMETRY
的GEOMETRY
。
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 的新手,并尝试了几个涉及循环和异常的查询,但我无法让这些工作。
解决方案
您应该能够将您正在调用的函数包装在另一个捕获并吞下错误的函数中。就像是:
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;
(不过,显然你最好捕捉并忽略你想忽略的特定错误,而不是所有错误。)
推荐阅读
- javascript - 尽管加载了脚本,但未定义 jQuery
- javascript - 无法下载 XLSX.Full.Min.JS
- clojure - 启动方法后基座组件不更新自身
- java - 如何在 SpringBoot ApiSettings 中为 @Value 设置默认列表
- c# - 调用 xiCam.OpenDevice() 为 ximea 相机引发异常“无效句柄”
- unit-testing - flask_restful 应用程序上的单元测试不起作用 - 卡在运行的烧瓶服务器上
- python - 从列表中删除元素
- tensorflow - tensorflow:如何使用 tf.nn.leaky_relu 和 alpha 作为 tf.contrib.layers.fully_connected 的activation_fn?
- ios - 无法单击自定义 UICollectionViewCell 内容
- node.js - 使用 multer 发送状态和文件