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ボックスでこれを試しています。

4

2 に答える 2

3

まず、executeQueryクエリではないステートメントを使用して実行しています。execute代わりに試してみてください。

とにかく、ALTER文はDDL(データ定義言語)の一部です(SQLはクエリ用、DML-データ操作言語-は挿入/更新/削除用です)。JDBCでDDLがどの程度サポートされているかわかりません。

于 2013-02-26T16:41:05.917 に答える
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-26T16:43:22.323 に答える