我有一個驗證 Oracle 18c 中的 SDO_GEOMETRY 的查詢:
select
sdo_geom.validate_geometry_with_context(
sdo_geometry ('polygon ((676832.320 4857578.086, 665287.423 4857578.086, 665277.423 4878109.585,
676832.320 4878119.585, 676842.320 4857588.086))', 26917)
, 0.005) as validation
from
dual
VALIDATION
-----------------------------
13348 [Element <1>] [Ring <1>]
(1 row selected.)

db<>小提琴
該查詢在文本列中生成錯誤代碼,但沒有描述代碼的含義。
我可以在檔案中手動查找錯誤:82 ORA-12700 to ORA-19400
ORA-13348: 多邊形邊界未閉合
原因:多邊形的邊界沒有閉合。
行動:改變坐標值或幾何的 SDO_GTYPE 或 SDO_ETYPE 屬性的定義。
但是手動查找這些錯誤代碼很不方便。
有沒有辦法增強查詢,使其回傳完整的錯誤描述?(從資料庫中獲取描述)
uj5u.com熱心網友回復:
假設您可以決議字串以提取錯誤訊息,您可以將其傳遞給以sqlerrm獲取錯誤的文本(請注意,您顯然得到了一個正值,您需要取反該值才能將其傳遞給sqlerrm) . 我假設您可以在第一個空格之前查找所有內容以獲取錯誤號,但我沒有大量樣本可供使用。
declare
l_message varchar2(1000);
begin
l_message := sqlerrm( -13348 );
dbms_output.put_line( l_message );
end;
/
將列印
ORA-13348: polygon boundary is not closed
uj5u.com熱心網友回復:
基于@JustinCave 的回答,這是一個自定義函式,它從驗證文本中獲取錯誤描述:
with function error_description(validation in varchar2) return varchar2 is
begin
return sqlerrm(substr(validation, 1, instr(validation,' ') - 1) * -1); --Multiply by -1. Oracle error codes seem to be "negative".
end;
select
error_description(validation) as error_description
from
(select
sdo_geom.validate_geometry_with_context(
sdo_geometry ('polygon ((676832.320 4857578.086, 665287.423 4857578.086, 665277.423 4878109.585, 676832.320 4878119.585, 676842.320 4857588.086))', 26917), 0.005) as validation
from dual)
ERROR_DESCRIPTION
-------------------
ORA-13348: polygon boundary is not closed
編輯:
正如@SolomonYakobson 在相關文章中所指出的,SQLERRM() 函式也可以在 SELECT 查詢中使用(不需要自定義函式)。
某些型別的 Oracle 函式是否僅在 PL/SQL 中可用,而在 SQL 中不可用?
許多函式在 Oracle 提供的包 SYS.STANDARD 中定義。
例子:
SELECT SYS.STANDARD.SQLERRM(-1422) FROM DUAL;
所以我們只需要完全限定函式:SYS.STANDARD.SQLERRM()
select
sys.standard.sqlerrm(substr(validation, 1, instr(validation,' ') - 1) * -1) error_description
from
(select
sdo_geom.validate_geometry_with_context(
sdo_geometry ('polygon ((676832.320 4857578.086, 665287.423 4857578.086, 665277.423 4878109.585, 676832.320 4878119.585, 676842.320 4857588.086))', 26917), 0.005) as validation
from dual)
ERROR_DESCRIPTION
---------------------
ORA-13348: polygon boundary is not closed
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488351.html
標籤:sql 甲骨文 错误代码 oracle18c 甲骨文空间
下一篇:必須宣告PLS00302組件
