Oracle數據庫中存在參數化錯誤消息。例如,在oraus.msg中有01919,00000,「角色'%s'不存在」。 如果有人發出一些廢話GRANT ... TO ...%s被這個不存在的特權取代。 有可能引發異常-1919並向%s提供一些字符串?在oracle中格式化(或提供字符串)異常消息
代碼:
只產生ORA-01919: role '' does not exist
消息。
Oracle數據庫中存在參數化錯誤消息。例如,在oraus.msg中有01919,00000,「角色'%s'不存在」。 如果有人發出一些廢話GRANT ... TO ...%s被這個不存在的特權取代。 有可能引發異常-1919並向%s提供一些字符串?在oracle中格式化(或提供字符串)異常消息
代碼:
只產生ORA-01919: role '' does not exist
消息。
用戶定義的異常的目的是我們可以在PL/SQL程序的異常部分中捕獲特定的異常並優雅地處理它們。例如,如果我們在你的代碼片段周圍放置一些肉。...
create or replace grant_priv
(p_priv in varchar2
, p_grantee in varchar2)
is
not_system_privilege EXCEPTION;
PRAGMA EXCEPTION_INIT(not_system_privilege, -01919);
begin
execute immediate 'grant '||p_priv||' to '||p_grantee;
exception
when not_system_privilege then
raise_application_error(-20000, p_priv||' is not a real privilege', true);
when others then
raise;
end;
我們可以將任何東西放在EXCEPTIONS部分。將錯誤記錄在表或文件中,引發警報,無論如何。向上傳播異常是一個好習慣:只有callstack的最頂層 - 面向用戶的層 - 不應拋出異常。
一個觀察 - 它看起來像你可以使用utl_lms.format_message爲C式打印 - 希望我早些時候知道這一點(因爲會保存它寫)。似乎只是Ora10以上。
begin
dbms_output.put_line(
utl_lms.format_message(
'A %s is here and a %s is there and a %s too','Giraffe','Lion','Spider'));
end;
我看不到任何方法來滿足OP的要求 - 提升系統級的異常並替換正確的參數。
不過,如果你可以使用一個不同的異常數量的生活,你可以寫自己的異常處理程序,可以
一)採取必要的例外 B的串行)使用utl_lms.get_message檢索文字 C)使用format_message在參數 d代替)使用生成的文本
的問題是,這是行不通的,如果你的呼叫系統預計的ORA-01919提高用戶定義的異常。
感謝您的回覆,但UTL_LMS似乎更符合我的要求。 – 2010-09-07 06:09:04