2009-08-19 86 views
6

有誰知道如何獲取通過JDBC創建的觸發器。看來問題在於分號。任何反饋非常讚賞。當數據庫上運行,而不是在使用Java代碼運行通過JDBC創建觸發器(oracle)

下面的SQL工作:

Connection c=null; 
    Statement s=null; 
    try { 
     c=dataSource.getConnection(); 
     s=c.createStatement(); 
     s.executeUpdate("create or replace trigger startuptrigger after insert on startuptest for each row begin insert into startuptest values(99); end"); 
     s.close(); 
     s=null; 
     c.close(); 
     c=null; 
    } catch(SQLException e) { 
     if(s!=null) { try { s.close(); } catch(Exception f){} } 
     if(c!=null) { try { c.close(); } catch(Exception f){} } 
     throw new IOException(e.toString()); 
    } 

我已經試過s.execute(...)和s.executeUpdate(... )並沒有區別。我使用的是ojdbc5.jar驅動程序。 Oracle返回錯誤:

ORA-04098: trigger 'POLICYUAT.STARTUPTRIGGER' is invalid and failed re-validation 

回答

0

我試過上面的代碼,它在創建觸發器時工作正常。 那麼,爲什麼上面不工作可能的原因:

  1. 與您連接不具有權限創建觸發器帳戶: 嘗試直接連接,並檢查是否有權利。
  2. 在sqlplus中手動執行上述觸發器,並檢查您的表是否存在,並且您有權插入它。
4

最後,PL/SQL語法在末尾末尾末尾需要一個分號。那就是該字符串應該如下

「創建或替換觸發器啓動觸發器後插入啓動測試每行開始插入啓動測試值(99); 結束;」

+1

+1爲The Doors歌詞風格:_「結尾在盡頭」_ ;-) – splash 2013-01-08 09:01:02