if(tableNames==null||tableNames.length==0){
throw new RuntimeException("入参tableNames不能为空!");
}
//查询指定表的外键约束
String sql = null;
String dbType = getDBType();
if(dbType.contains("ORACLE")){
sql = "select 'alter table ' || table_name || ' disable constraint ' || constraint_name from user_constraints where constraint_type='R' and TABLE_NAME in(";
if(isEnable){
sql = sql.replace("disable", "enable");
}
}else if(dbType.contains("DB2")){
sql = "select 'ALTER TABLE ' || TBNAME || ' ALTER FOREIGN KEY ' || NAME ||' NOT ENFORCED ' FROM SYSIBM.SYSTABCONST WHERE CONSTRAINTYP='F' and TBNAME in(";
if(isEnable){
sql = sql.replace("NOT ENFORCED", "ENFORCED");
}
}else{
throw new RuntimeException("数据库类型无效(仅支持Oracle和DB2),dbType="+dbType);
}
StringBuffer generateSQL = new StringBuffer(sql);
for(int i=0;i<tableNames.length;i++){
generateSQL.append(" '");
generateSQL.append(tableNames.toUpperCase());//注意须转换成大写
generateSQL.append("',");
}
generateSQL.deleteCharAt(generateSQL.length()-1);
generateSQL.append(")");
List<Map<String, Object>> dataSet = DBTool.executeQuery(generateSQL.toString());
//启用or停止查询出的外键约束
for(int i=0;i<dataSet.size();i++){
Map<String, Object> record = dataSet.get(i);
Iterator<Entry<String, Object>> itor = record.entrySet().iterator();
while(itor.hasNext())
{
Entry<String, Object> e = itor.next();
DBTool.executeUpdate(e.getValue().toString(),UpdateType.ALTER);
}
}
|