Thursday, August 16, 2012

A quick and dirty way to export Oracle triggers to individual text files (using Java)

Export "before row insert" triggers from Oracle 11g to individual files using a little bit of Java:

import java.sql.*;
import java.io.*;

class ExportTriggers {
    public static void main(String[] args) throws Exception {
        new ExportTriggers().doWork();
    }
    
    private void doWork() throws Exception {
        Class.forName("oracle.jdbc.OracleDriver").newInstance();
        String url = "jdbc:oracle:thin:@10.10.10.10:1521:orcl";
        Connection conn = DriverManager.getConnection(url, "user", "password");
        Statement st = null;
        ResultSet rs = null;
        String sql = "" +
        "SELECT   table_name  , " +
        "         description , " +
        "         trigger_name, " +
        "         trigger_body " +
        "FROM     all_triggers " +
        "WHERE    owner            ='FOO' " +
        "AND      trigger_type     = 'BEFORE EACH ROW' " +
        "AND      triggering_event = 'INSERT' " +
        "ORDER BY table_name";
        
        try {
            st = conn.createStatement();
            rs = st.executeQuery(sql);
            
            while (rs.next()) {
                String name = rs.getString("TRIGGER_NAME");
                String description = rs.getString("DESCRIPTION");
                String body = rs.getString("TRIGGER_BODY");
                
                File file = new File("./output/" + name.toLowerCase() + "_trg.sql");
                FileWriter fw = new FileWriter(file);
                fw.write("CREATE OR REPLACE TRIGGER\r\n");
                fw.write(description);
                fw.write(body);
                fw.write("\r\n/");
                fw.flush();
                fw.close();
                
            } // end while
        } finally {
            rs.close();
            st.close();
            conn.close();
        }
    }
}

No comments:

Post a Comment