2009-08-19 153 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