@Override protected void doClean() throws SQLException { if ("SYSTEM".equals(name.toUpperCase())) { throw new FlywayException( "Clean not supported on Oracle for user 'SYSTEM'! You should NEVER add your own objects to the SYSTEM schema!"); } jdbcTemplate.execute("PURGE RECYCLEBIN"); for (String statement : generateDropStatementsForSpatialExtensions()) { jdbcTemplate.execute(statement); } for (String statement : generateDropStatementsForQueueTables()) { // for dropping queue tables, a special grant is required: // GRANT EXECUTE ON DBMS_AQADM TO flyway; jdbcTemplate.execute(statement); } for (String statement : generateDropStatementsForObjectType("SEQUENCE", "")) { jdbcTemplate.execute(statement); } for (String statement : generateDropStatementsForObjectType("FUNCTION", "")) { jdbcTemplate.execute(statement); } for (String statement : generateDropStatementsForObjectType("MATERIALIZED VIEW", "PRESERVE TABLE")) { jdbcTemplate.execute(statement); } for (String statement : generateDropStatementsForObjectType("PACKAGE", "")) { jdbcTemplate.execute(statement); } for (String statement : generateDropStatementsForObjectType("PROCEDURE", "")) { jdbcTemplate.execute(statement); } for (String statement : generateDropStatementsForObjectType("SYNONYM", "")) { jdbcTemplate.execute(statement); } for (String statement : generateDropStatementsForObjectType("TRIGGER", "")) { jdbcTemplate.execute(statement); } for (String statement : generateDropStatementsForObjectType("VIEW", "CASCADE CONSTRAINTS")) { jdbcTemplate.execute(statement); } for (Table table : allTables()) { table.drop(); } for (String statement : generateDropStatementsForXmlTables()) { jdbcTemplate.execute(statement); } for (String statement : generateDropStatementsForObjectType("TYPE", "FORCE")) { jdbcTemplate.execute(statement); } }