在ORACLE觸發器裡調用JAVA程式

來源:互聯網
上載者:User

標籤:exception   ora   函數   data   blog   ade   delete   檔案   miss   

因為項目需要,有一個已經寫好的Java程式,想要在Oracle某個表的觸發器中調用,以使得每次資料更新時,調用這個JAVA程式,來修改後台某個資料。

現將過程記錄如下:

1。編寫JAVA程式

 

[java] view plain copy 
  1. public class Main {  
  2.  public static void modify(String statTime)  
  3.     {  
  4.          String datas = "/var/spool/cron/oracle";  
  5.         File data = new File(datas);  
  6.         StringBuffer backup = null;  
  7.         try {  
  8.              StringBuffer content = new StringBuffer();  
  9.               backup = new StringBuffer();  
  10.             BufferedReader san = new BufferedReader(new FileReader(data));  
  11.             String line = null;  
  12.             while((line=san.readLine())!=null)  
  13.             {  
  14.                 backup.append(line);  
  15.                 backup.append("/n");  
  16.             }  
  17.            content.append("15 ");  
  18.            content.append(statTime.trim());  
  19.            content.append(" * * * /home/oracle/task.sh");  
  20.            content.append("/n");  
  21.   
  22.            content.append("13 ");  
  23.            content.append(statTime.trim());  
  24.            content.append("* * * /home/oracle/tj_task/task2.sh");  
  25.            content.append("/n");  
  26.              
  27.            FileWriter writer = new FileWriter(data,false);  
  28.             writer.write(content.toString());  
  29.             writer.flush();  
  30.   
  31.             } catch (FileNotFoundException e) {  
  32.                 e.printStackTrace();  
  33.             } catch (IOException e) {  
  34.                 try  
  35.                 {  
  36.                     FileWriter writer = new FileWriter(data,false);  
  37.                     writer.write(backup.toString());  
  38.                     writer.flush();  
  39.                 }catch(Exception ex)  
  40.                 {  
  41.                     ex.printStackTrace();  
  42.                 }  
  43.             }  
  44.     }  
  45. }  

 

 

注意,這裡寫JAVA程式不需要遵循標準的JAVA程式,一定要有main入口函數,相反,這裡的函數一般不要取名為main,除非格式是標準的main 函數格式,剛開始的時候我就犯了這個錯誤,一直找不到原因,後來經CSDN上的人點撥後,才發現是我把上面函數名寫成了main,後來換個名字就好了。還有,這個函數一定是要靜態。

 

2。把JAVA程式LOAD進oracle

在$ORACLE_HOME/bin目錄下有個LOADJAVA命令,使用這個命令將剛寫好的JAVA程式LOAD進資料庫。

loadjava -user test/[email protected] -o -v -f -r Main.java

如果成功的話,會列印出來資訊提示成功,若程式有編譯錯誤的話,也會提示你錯誤的地方。

 

3。修改許可權

因為我的這個JAVA程式裡涉及到對檔案的讀寫操作,所以要先修改許可權。

首先以管理員身份登入進資料庫

sqlplus / as sysdba

然後執行

begin

dbms_java.grant_permission(‘TEST‘,‘SYS:java.io.FilePermission‘,‘/var/spool/cron/oracle‘,‘read,write,execute,delete‘);

end;

/

執行完畢後,在資料庫裡執行上述JAVA程式時,就擁有讀寫該檔案的許可權了。

 

4。建立預存程序

進入到資料庫,我是在SQLPLUS命令列

create or replace procedure Modify(name varchar2) as language Java name ‘Main.modify(java.lang.String)‘;

/

會提示建立預存程序成功。

 

5。增加trigger

我是在TOAD裡直接針對某個表增加trigger,所以我唯寫出關鍵區段的代碼

begin

if :old.name = ‘time‘ then

Modify(:new.value);

end if;

end;

 

至此,在ORACLE的trigger裡調用JAVA程式就完成了,後來的實驗證明,每當更新這個表時,都確實執行了該JAVA程式,完成了對檔案的讀寫。

  

在ORACLE觸發器裡調用JAVA程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.