有一種辦法,可以對表進行審計。
專注于為中小企業(yè)提供成都網(wǎng)站建設、網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)嘉禾免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
init文件的參數(shù)必須:
audit_trail=DB
比如:
用user用戶登陸.打算對表user.test的插入操作做審計.
操作如下:
audit insert on user.test;
執(zhí)行你的語句:
insert into test values (....);
查詢sql執(zhí)行情況:
select * from sys.aud$;
1、出現(xiàn)異常,會自動回滾,不用為了回滾而捕獲異常
2、如需要對異常進行處理,可參考以下異常捕獲邏輯
begin
--代碼處理邏輯。。。
exception
when?no_data_found?then
--no_data_found異常處理。。。
rollback;
when?others?then
--其他異常處理。。。
rollback;
以上。
通過如下代碼:
public static String getExceptionAllinformation(Exception ex){
String sOut = "";
StackTraceElement[] trace = ex.getStackTrace();
for (StackTraceElement s : trace) {
sOut += "\tat " + s + "\r\n";
}
return sOut;
}
擴展資料:
注意事項
oracle存儲過程,可以通過sqlcode 獲取異常編碼、通過sqlerrm獲取異常信息。
例子:
create or replace procedure write2blob(p_id ? ? ? ?in number, --id
p_blob_data in blob,
p_msg ? ? ? out varchar2) --數(shù)據(jù)
is
v_lobloc ? ? blob; --目標blob
v_blob_data blob; --作為接受參數(shù)的字段,參數(shù)變量不能直接拿來賦值
v_amount ? ? binary_integer; --總長度
v_sub_length binary_integer; --一次讀取的最大長度,不超過32766
v_sub_blob ? blob; --一次讀取的子串
v_offset ? ? binary_integer; --游標
v_err_msg ? ?varchar2(1000);
v_id ? ? ? ? binary_integer; --要修改或新增的記錄ID
v_temp ? ? ? binary_integer; --臨時變量用于判斷是否有v_id對應的記錄begin
v_amount ? ? := length(p_blob_data);
v_blob_data ?:= p_blob_data;
v_sub_length := 32767;
v_offset ? ? := 1;
v_id ? ? ? ? := p_id;
v_temp ? ? ? := 0; ?--execute immediate v_query_string into v_lobloc;
select count(1) into v_temp from a where id = v_id; ?--查詢是否有v_id對應的記錄,并且賦值給v_te/*注意:無論是修改還是新增,blob字段都需要用empty_blob()進行初始化,否則后邊的blob內(nèi)容,不能寫進表里面。
一般寫在存儲過程處理異常。
exception
when others then
out_mes:=out_mes || '執(zhí)行失?。∫驗?|| sqlcode || '錯誤' ;
out_mes你自己可以處理,插入日志表中 或作為輸出參數(shù)。