【问题标题】:disabling triggers from java从java禁用触发器
【发布时间】:2013-02-12 05:15:08
【问题描述】:

我不完全确定为什么会这样。当我运行命令时:

 ALTER TRIGGER ORIGDV87.UPDATE_TEAM_GROUP_TRIGGER DISABLE/ENABLE

我可以看到它如何更改触发器。我正在尝试从 java 以编程方式执行此操作:

private void trigger_alter(Connection con, String flag) throws Exception
{
    Query query = new Query(con);
    String selectSql = "select table_owner, trigger_name from user_triggers";
    Query queryTrg = new Query(con);
    query.executeQuery(selectSql);
     while(query.next()) {
        int i = 0;
        String table_owner = query.getColValue("table_owner");
        String trigger_name = query.getColValue("trigger_name");
        String triggerSql = "ALTER TRIGGER " + table_owner + "." + trigger_name + " "+ flag  ;
        System.out.println( triggerSql);
        queryTrg.executeQuery(triggerSql);
    }
    log_obj.FmtAndLogMsg("All triggers have been " + flag+ "D");
}

我得到了这个例外:2013/02/26 10:38:56.795 TableConverter: ERROR main() occurred: java.lang.Exception: Error executing query: ALTER TRIGGER XXXX.UPDATE_TEAM_GROUP_TRIGGER DISABLE error=java.sql.SQLException: ORA-01003: no statement parsed

这是一个 oracle 数据库,我正在 Solaris 机器上尝试这个。

【问题讨论】:

    标签: java oracle triggers


    【解决方案1】:

    首先,您正在使用不是查询的语句执行executeQuery。请改用execute

    无论如何,ALTER 语句是 DDL(数据定义语言)的一部分(SQL 用于查询,DML -Data Manipulation Language- 用于插入/更新/删除)。我不确定 JDBC 对 DDL 的支持程度。

    【讨论】:

      【解决方案2】:

      替换

      queryTrg.executeQuery(triggerSql);
      

      con.createStatement().execute(triggerSql);
      

      但是,批量处理 ALTER TRIGGER 语句会更好:

      private void trigger_alter(Connection con, String flag) throws Exception
      {
          Query query = new Query(con);
          String selectSql = "select table_owner, trigger_name from user_triggers";
      
          Statement trgStmt = con.createStatement();
      
          query.executeQuery(selectSql);
           while(query.next()) {
              int i = 0;
              String table_owner = query.getColValue("table_owner");
              String trigger_name = query.getColValue("trigger_name");
              String triggerSql = "ALTER TRIGGER " + table_owner + "." + trigger_name + " "+ flag  ;
              System.out.println( triggerSql);
              trgStmt.addBatch(triggerSql);
          }
      
          trgStmt.executeBatch();
          log_obj.FmtAndLogMsg("All triggers have been " + flag+ "D");
      }
      

      【讨论】:

        猜你喜欢
        • 2013-02-09
        • 2016-09-05
        • 1970-01-01
        • 2020-09-24
        • 2011-09-22
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多