在相關帖子中,@MTO 提供了一個自定義函式,用于確定哪些行會導致查詢錯誤:
WITH FUNCTION test_from_wkbgeometry(
v_data IN BLOB
) RETURN NUMBER
IS
temp SDO_GEOMETRY;
BEGIN
temp := sdo_util.from_wkbgeometry(v_data);
RETURN 1;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
SELECT *
FROM my_table
WHERE test_from_wkbgeometry(
sdo_util.to_wkbgeometry(
sdo_geometry(replace(sde.st_astext(shape),'LINESTRING M','LINESTRING'))
)
) = 0;
該自定義功能運行良好。在查詢中,如果給定行的函式出錯,則自定義函式會標記該行。
這讓我可以找到問題行并確定問題所在,而不是整個查詢出錯。
問題:
在撰寫自定義函式按預期作業時,這讓我想到,是否有任何 OOTB Oracle 函式可以達到同樣的目的?
例如,在 Excel 中,我們有通用的 IFERROR() 函式。甲骨文有類似的東西嗎?
uj5u.com熱心網友回復:
但是,一般情況下沒有,對于決議日期等特定內容,有一些開箱即用的示例:
SELECT *
FROM table_name
WHERE -- Ignore rows that were already null
your_date_string IS NOT NULL
AND -- Find the rows that would throw an error when parsing them.
TO_DATE(
your_date_string DEFAULT NULL ON CONVERSION ERROR,
'YYYY-MM-DD HH24:MI:SS'
) IS NULL;
此語法是從 Oracle 12 引入的,默認是DEFAULT ERROR ON CONVERSION ERROR,但可以更改DEFAULT NULL ON CONVERSION ERROR為允許您查找錯誤。
其中,對于樣本資料:
CREATE TABLE table_name (your_date_string) AS
SELECT 'this is not a date' FROM DUAL UNION ALL
SELECT '2022-01-01 00:00:00' FROM DUAL UNION ALL
SELECT NULL FROM DUAL;
輸出:
YOUR_DATE_STRING 這不是約會
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488366.html
