从Java禁用触发器。

3

我不完全确定为什么会出现这种情况。当我运行以下命令时:

 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系统中进行尝试。

2个回答

3
首先,您正在使用不是查询的语句执行executeQuery。请尝试改用execute
无论如何,ALTER语句是DDL(数据定义语言)的一部分(SQL用于查询,DML-数据操作语言-用于插入/更新/删除)。我不确定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");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接