103 lines
3.6 KiB
Plaintext
103 lines
3.6 KiB
Plaintext
-- 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%>; |