通过 JDBC (oracle) 创建触发器

Posted

技术标签:

【中文标题】通过 JDBC (oracle) 创建触发器【英文标题】:Creating triggers over JDBC (oracle) 【发布时间】:2009-08-19 04:13:35 【问题描述】:

有谁知道如何通过 JDBC 创建触发器。看来问题与分号有关。非常感谢任何反馈。

以下 SQL 在数据库上运行时有效,但在使用以下 Java 代码运行时无效:

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

【问题讨论】:

【参考方案1】:

PL/SQL 语法要求末尾有分号,end。也就是字符串应该如下

"在每行插入启动测试后创建或替换触发器启动触发器开始插入启动测试值(99);结束;"

【讨论】:

+1 for The Doors 歌词风格:"在结尾结尾结尾" ;-)【参考方案2】:

我尝试了上面的代码,它在创建触发器时工作正常。 所以上述不起作用的原因可能是:

    您要连接的帐户无权创建触发器: 尝试直接连接并检查您是否有权限。 在sqlplus中手动执行上面的触发器,检查你的表是否存在,你是否有权插入。

【讨论】:

以上是关于通过 JDBC (oracle) 创建触发器的主要内容,如果未能解决你的问题,请参考以下文章

只允许通过 sql server、oracle 和 postgres 中的 jdbc 更新表

oracle中,用pl/sql创建触发器报触发器无效且未通过重新验证

oracle序列怎么用

oracle中 触发器 \'SCOTT.TR_EMP\' 无效且未通过重新验证是啥错误

连续创建多个Oracle触发器失败,单个创建才成功的解决方法

oracle通过触发器实现登录登出日志记录