程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle外部程序的觸發小結

Oracle外部程序的觸發小結

編輯:Oracle數據庫基礎

在論壇裡曾經看過一個帖子,有位用戶問了這麼一個問題: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;
  2、直接外部操作,建觸發器:

  create or replace trigger table after insert  for each row
  ...
  begin
  ...
  yourprocess(yourprara);
  ...
  end;
  當然,2的方法這只能更總到提交前,如果要監視提交後狀態,

你可以在操作表建立標志位或專門建個表,操作表發生變化就通過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.
  上面是調用HelloWorld的例子,你可以修改HelloWorld方法,然後在觸發器裡面調用以實現這位用戶的要求!
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved