-- This pattern generated a merge statement for Oracle database or equivalent of a merge in other dbs --(c) 2008 Talend Inc. <% EXTRACT(__MERGE_ON__); EXTRACT(__UPDATE_MAPPING__); EXTRACT(__ADDITIONAL_UPDATE_COLUMNS__); EXTRACT(__INSERT_MAPPING__); EXTRACT(__ADDITIONAL_INSERT_COLUMNS__); String dbType = "__DBTYPE__"; boolean hasUpdateClause = __USE_UPDATE__; boolean hasAddtionalUpdateColumns = __SPECIFY_ADDITIONAL_UPDATE_COLUMNS__; boolean hasUpdateWhereClause = __SPECIFY_UPDATE_WHERE_CLAUSE__; boolean hasInsertClause = __USE_INSERT__; boolean hasAdditionalInsertColumns = __SPECIFY_ADDITIONAL_INSERT_COLUMNS__; boolean hasInsertWhereClause = __SPECIFY_INSERT_WHERE_CLAUSE__; boolean flag = false; String mergeOnStr = ""; for(int i=0; i < __MERGE_ON_SRC_COLUMN__.length; i++){ if (flag) { mergeOnStr += " AND "; } else { flag = true; } mergeOnStr += (__TARGET_TABLE__ + "." + __MERGE_ON_TRG_COLUMN__[i] + " = " + __SOURCE_TABLE__ + "." + __MERGE_ON_SRC_COLUMN__[i]); } String updateStr = ""; String updateWhereStr = ""; flag = false; if (hasUpdateClause) { for(int i=0; i < __UPDATE_MAPPING_SRC_COLUMN__.length; i++) { if (flag) { updateStr += ","; } else { flag = true; } updateStr += (__TARGET_TABLE__ + "." + __UPDATE_MAPPING_TRG_COLUMN__[i] + " = " + __SOURCE_TABLE__ + "." + __UPDATE_MAPPING_SRC_COLUMN__[i]); } if (hasAddtionalUpdateColumns) { for(int i=0; i < __ADDITIONAL_UPDATE_COLUMNS_TRG_COLUMN_VALUE__.length; i++) { if (flag) { updateStr += ","; } else { flag = true; } updateStr += (__TARGET_TABLE__ + "." + __ADDITIONAL_UPDATE_COLUMNS_TRG_COLUMN_NAME__[i] + " = " + __ADDITIONAL_UPDATE_COLUMNS_TRG_COLUMN_VALUE__[i]); } } if (hasUpdateWhereClause) { updateWhereStr = " " + __UPDATE_WHERE_CLAUSE__ + " "; } } String insertColumnsStr = ""; String insertValuesStr = ""; String insertWhereStr = ""; String insertStr = ""; flag = false; if (hasInsertClause) { for(int i=0; i < __INSERT_MAPPING_TRG_COLUMN__.length; i++) { if (flag) { insertColumnsStr += ","; insertValuesStr += ","; } else { flag = true; } insertColumnsStr += (__TARGET_TABLE__ + "." + __INSERT_MAPPING_TRG_COLUMN__[i]); insertValuesStr += (__SOURCE_TABLE__ + "." + __INSERT_MAPPING_SRC_COLUMN__[i]); } if (hasAdditionalInsertColumns) { for(int i=0; i < __ADDITIONAL_INSERT_COLUMNS_TRG_COLUMN_NAME__.length; i++) { if (flag) { insertColumnsStr += ","; insertValuesStr += ","; } else { flag = true; } insertColumnsStr += (__TARGET_TABLE__ + "." + __ADDITIONAL_INSERT_COLUMNS_TRG_COLUMN_NAME__[i]); insertValuesStr += (__ADDITIONAL_INSERT_COLUMNS_TRG_COLUMN_VALUE__[i]); } } if (hasInsertWhereClause) { insertWhereStr = " " + __INSERT_WHERE_CLAUSE__ + " "; } insertStr = "(" + insertColumnsStr + ") VALUES (" + insertValuesStr + ")"; } String mergeString = ""; if (dbType.equals("DBORACLE")) { if (hasInsertClause || hasUpdateClause) { mergeString = "MERGE INTO " + __TARGET_TABLE__ + " USING " + __SOURCE_TABLE__ + " ON (" + mergeOnStr + ")" + (hasUpdateClause ? (" WHEN MATCHED THEN UPDATE SET " + updateStr + (hasUpdateWhereClause ? (" WHERE " + updateWhereStr) : "")) : "") + (hasInsertClause ? (" WHEN NOT MATCHED THEN INSERT " + insertStr + (hasInsertWhereClause ? (" WHERE " + insertWhereStr) : "")) : ""); } else { mergeString = "DELETE FROM " + __TARGET_TABLE__ + " WHERE 1=0"; } } %> <%=mergeString%>;