package liquibase.sqlgenerator.core; import liquibase.database.Database; import liquibase.database.core.OracleDatabase; import liquibase.exception.ValidationErrors; import liquibase.sql.Sql; import liquibase.sql.UnparsedSql; import liquibase.sqlgenerator.SqlGenerator; import liquibase.sqlgenerator.SqlGeneratorChain; import liquibase.statement.StoredProcedureStatement; public class StoredProcedureGenerator extends AbstractSqlGenerator<StoredProcedureStatement> { @Override public ValidationErrors validate(StoredProcedureStatement storedProcedureStatement, Database database, SqlGeneratorChain sqlGeneratorChain) { ValidationErrors validationErrors = new ValidationErrors(); validationErrors.checkRequiredField("procedureName", storedProcedureStatement.getProcedureName()); return validationErrors; } @Override public Sql[] generateSql(StoredProcedureStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) { StringBuilder string = new StringBuilder(); string.append("exec ").append(statement.getProcedureName()).append("("); for (String param : statement.getParameters()) { string.append(" ").append(param).append(","); } String sql = string.toString().replaceFirst(",$", "")+")"; if (database instanceof OracleDatabase) { sql = sql.replaceFirst("exec ", "BEGIN ").replaceFirst("\\)$", "); END;"); } return new Sql[] { new UnparsedSql(sql)}; } }