DB2 單張表 merge語句

<span style="font-family: Arial, Helvetica, sans-serif;">merge into CHANNEL_AGENT_PEOPLE_NUMBER_201503 a using (SELECT  ? TIME_ID,? CITY_NAME,? NODE_NAME,? NODE_CODE,? PEOPLE_NUMBER, ? VEHICLE_RUNNING_COSTS,? MAIL_TRANSPORT_FEES,? TRAINING_COSTS, ? CONSUMABLES,? OTHER_OFFICE_EXPENSES FROM SYSIBM.SYSDUMMY1) B  on a.time_id = b.time_id and a.CITY_NAME= b.CITY_NAME AND  A.NODE_NAME = B.NODE_NAME AND A.NODE_CODE = B.NODE_CODE WHEN MATCHED THEN  update  set a.PEOPLE_NUMBER = b.PEOPLE_NUMBER, A.VEHICLE_RUNNING_COSTS =B.VEHICLE_RUNNING_COSTS, A.MAIL_TRANSPORT_FEES= B.MAIL_TRANSPORT_FEES, A.TRAINING_COSTS = B.TRAINING_COSTS, A.CONSUMABLES = B.CONSUMABLES, A.OTHER_OFFICE_EXPENSES = B.OTHER_OFFICE_EXPENSES WHEN NOT MATCHED THEN  INSERT   VALUES( B.TIME_ID,B.CITY_NAME, B.NODE_NAME,B.NODE_CODE,B.PEOPLE_NUMBER,B.VEHICLE_RUNNING_COSTS, B.MAIL_TRANSPORT_FEES,	B.TRAINING_COSTS,B.CONSUMABLES,B.OTHER_OFFICE_EXPENSES)</span>


今天在開發中用到了單張表做merge語句,使用spring jdbctemplate的批量修改,所以要傳遞參數進去,使用了上面的merge語句完成,在此做個記錄。

部分java代碼如下:

private void uploadAgentChannel(Workbook workbook, String city, int month) {
		Sheet sheet = workbook.getSheetAt(0);
		List<Object[]> params = new ArrayList<Object[]>();
		for (int i = 3; i < sheet.getLastRowNum(); i++) {
			params.add(new Object[] { month,
					sheet.getRow(i).getCell(0).getStringCellValue(),
					sheet.getRow(i).getCell(1).getStringCellValue(),
					sheet.getRow(i).getCell(2).getStringCellValue(),
					sheet.getRow(i).getCell(3).getNumericCellValue(),
					sheet.getRow(i).getCell(4).getNumericCellValue(),
					sheet.getRow(i).getCell(5).getNumericCellValue(),
					sheet.getRow(i).getCell(6).getNumericCellValue(),
					sheet.getRow(i).getCell(7).getNumericCellValue(),
					sheet.getRow(i).getCell(8).getNumericCellValue() });
		}
		// 要判斷對應的月表是否存在,不存在就創建表

		if (!isTableExists("CHANNEL_AGENT_PEOPLE_NUMBER", month)) {
			jdbcTemplate.execute("create table CHANNEL_AGENT_PEOPLE_NUMBER_"
					+ month + " like CHANNEL_AGENT_PEOPLE_NUMBER");
		}
		// 使用merge語句可以修改和插入對應數據
		String sql = "merge into CHANNEL_AGENT_PEOPLE_NUMBER_"
				+ month
				+ " a using (SELECT "
				+ " ? TIME_ID,? CITY_NAME,? NODE_NAME,? NODE_CODE,? PEOPLE_NUMBER,"
				+ " ? VEHICLE_RUNNING_COSTS,? MAIL_TRANSPORT_FEES,? TRAINING_COSTS,"
				+ " ? CONSUMABLES,? OTHER_OFFICE_EXPENSES FROM SYSIBM.SYSDUMMY1) B "
				+ " on a.time_id = b.time_id and a.CITY_NAME= b.CITY_NAME AND "
				+ " A.NODE_NAME = B.NODE_NAME AND A.NODE_CODE = B.NODE_CODE"
				+ " WHEN MATCHED THEN  update  set a.PEOPLE_NUMBER = b.PEOPLE_NUMBER,"
				+ " A.VEHICLE_RUNNING_COSTS =B.VEHICLE_RUNNING_COSTS,"
				+ " A.MAIL_TRANSPORT_FEES= B.MAIL_TRANSPORT_FEES,"
				+ " A.TRAINING_COSTS = B.TRAINING_COSTS, A.CONSUMABLES = B.CONSUMABLES,"
				+ " A.OTHER_OFFICE_EXPENSES = B.OTHER_OFFICE_EXPENSES"
				+ " WHEN NOT MATCHED THEN  INSERT   VALUES( B.TIME_ID,B.CITY_NAME,"
				+ " B.NODE_NAME,B.NODE_CODE,B.PEOPLE_NUMBER,B.VEHICLE_RUNNING_COSTS,"
				+ " B.MAIL_TRANSPORT_FEES,"
				+ "	B.TRAINING_COSTS,B.CONSUMABLES,B.OTHER_OFFICE_EXPENSES)";
		jdbcTemplate.batchUpdate(sql, params);

	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章