private String getCreateIndexStmt(Connection oraConn, String tableName,
String indexName, boolean isUnique) throws Exception {
Statement stmt = oraConn.createStatement();
String sql = "select column_name from user_ind_columns where index_name='"
+ indexName + "' order by column_position";
ResultSet cols = stmt.executeQuery(sql);
StringBuffer resultSql = new StringBuffer();
if (isUnique) {
resultSql.append("create unique index "
+ indexName.replaceAll("\\$", "_S_") + " on "
+ tableName.replaceAll("\\$", "_S_") + "(");
} else {
resultSql.append("create index "
+ indexName.replaceAll("\\$", "_S_") + " on "
+ tableName.replaceAll("\\$", "_S_") + "(");
}
int colIndex = 0;
while (cols.next()) {
// 有极少量特殊情况要跳过的列
// TODO 可能会带来问题,如:对违反唯一性约束的数据未做校验
if (cols.getString("column_name").indexOf("$") != -1) {
return null;
}
if (0 != colIndex) {
resultSql.append(", ");
}
resultSql.append("" + cols.getString("column_name"));
colIndex++;
}
resultSql.append(");");
stmt.close();
if(null!=cols)try{
cols.close();
}catch(Exception e){
}
// 如果所以一个数据列都没有(不知为何,Oracle库中有这种情况),则不创建这个索引
if (0 == colIndex) {
return null;
}
return resultSql.toString();
}
String indexName, boolean isUnique) throws Exception {
Statement stmt = oraConn.createStatement();
String sql = "select column_name from user_ind_columns where index_name='"
+ indexName + "' order by column_position";
ResultSet cols = stmt.executeQuery(sql);
StringBuffer resultSql = new StringBuffer();
if (isUnique) {
resultSql.append("create unique index "
+ indexName.replaceAll("\\$", "_S_") + " on "
+ tableName.replaceAll("\\$", "_S_") + "(");
} else {
resultSql.append("create index "
+ indexName.replaceAll("\\$", "_S_") + " on "
+ tableName.replaceAll("\\$", "_S_") + "(");
}
int colIndex = 0;
while (cols.next()) {
// 有极少量特殊情况要跳过的列
// TODO 可能会带来问题,如:对违反唯一性约束的数据未做校验
if (cols.getString("column_name").indexOf("$") != -1) {
return null;
}
if (0 != colIndex) {
resultSql.append(", ");
}
resultSql.append("" + cols.getString("column_name"));
colIndex++;
}
resultSql.append(");");
stmt.close();
if(null!=cols)try{
cols.close();
}catch(Exception e){
}
// 如果所以一个数据列都没有(不知为何,Oracle库中有这种情况),则不创建这个索引
if (0 == colIndex) {
return null;
}
return resultSql.toString();
}
本文介绍了一个用于Oracle数据库中创建索引的方法,通过SQL语句动态生成唯一或非唯一索引,并考虑了特殊字符处理及列筛选逻辑。
1万+

被折叠的 条评论
为什么被折叠?



