在論壇裡曾經看過一個帖子,有位用戶問了這麼一個問題:Oracle 裡一個表插入一條數據,提交後,如何讓外部程序收到這個消息?
當時沒有留意,現在想想好像應該可以總結一下了。舉例:
1、過程中:
... declare myexcept exception; inserted_count1 number; inserted_count2 number; ... begin insert into table values(...); inserted_count1 := sql%rowcount; ... --可以判斷inserted_count1是否大於0來確定是否插入了數據 commit; inserted_count2 := sql%rowcount; --這裡inserted_count2為0 ... --事實上,這裡一定是提交成功才會執行,否則會跳到exception段 yourprocess(yourpara);--調用你自己的過程或語句跟別的過程通信 ... exception when others then ---你可以根據sqlcode自己去查具體的提交失敗原因 ... yourprocess_for_fail(yourpara) --調用你自己的過程跟別的過程通信 ... end;
create or replace trigger table after insert for each row
...
begin
...
yourprocess(yourprara);
...
end;
你可以在操作表建立標志位或專門建個表,操作表發生變化就通過trigger更新變化信息到狀態表,掃描狀態表就知道是否commit;成功了
我想這位用戶應該通過trigger來調用Java source來實現插入數據後來通知外部程序來做一些事情:
使用Java source的例子如下:
SQL> create or replace and compile Java source named HelloWorld
2 as
3 public class HelloWorld {
4 public static void db_run (){
5 System.out.println("Hello World");
6 }
7 }
8 / Java created.
SQL> create or replace procedure run_helloworld
2 as language Java
3 name 'HelloWorld.db_run()';
4 / Procedure created.
SQL> set serveroutput on size 5000
SQL> call dbms_Java.set_output(5000) ; Call completed. SQL>
SQL> exec run_helloworld ;
Hello World PL/SQL procedure successfully completed.