2013-02-26 28 views
3

我不完全確定爲什麼會發生這種情況。當我運行命令:從java中禁用觸發器

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

更換

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"); 
} 
3

首先,您正在執行一個executeQuery,該語句不是查詢語句。改爲使用execute

無論如何,ALTER語句是DDL(數據定義語言)的一部分(SQL用於查詢,DML-數據操作語言 - 用於插入/更新/刪除)。我不確定JDBC中支持DDL有多好。