设为首页 收藏本站
查看: 1120|回复: 0

[经验分享] oracle数据库脚本转为sqlServer、DB2

[复制链接]

尚未签到

发表于 2016-11-18 10:54:56 | 显示全部楼层 |阅读模式
package util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author wyl
* @Description TODO
* @date 2016-5-19
*
*/
public class OracleToOthers {
/**
* @Description: TODO
* @param args  
*/
public static void main(String[] args) {
/*
* 原oracle数据库脚本由plSql导出,导出时只选择create tables选项
* 对于原oracle数据库中的表或者列的注释,如果注释中存在换行符,生成的目标脚本会有错误,请在生成的目标脚本做修改
*/
//原文件路径
String oracleFile = "C:\\Users\\admin\\Desktop\\table.sql";
//目标文件路径
String sqlServerFile = "C:\\Users\\admin\\Desktop\\table_sqlserver.sql";
String db2File = "C:\\Users\\admin\\Desktop\\table_db2.sql";
oracleToSqlserver(oracleFile,sqlServerFile);
oracleToDB2(oracleFile,db2File);

}
/**
* @Description: 由oracle脚本转为sqlserver脚本
* @param oracleFile    原oracle数据库脚本文件路径
* @param sqlServerFile    转为sqlserver脚本文件的目标路径
*/
public static void oracleToSqlserver(String oracleFile,String sqlServerFile) {
File readFile = new File(oracleFile);
File writeFile = new File(sqlServerFile);
BufferedReader reader = null;
BufferedWriter writer = null;
try {
reader = new BufferedReader(new FileReader(readFile));
writer = new BufferedWriter(new FileWriter(writeFile));
StringBuffer sb = new StringBuffer();
String tempString = null;
String tempStr = null;
String tempS = null;
String tableName = null;
String column = null;
String common = null;
int endIndex = 0;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
//System.out.println("line " + line + ": " + tempString);
//转换数据类型
tempString=tempString.replaceAll("VARCHAR2","VARCHAR");
tempString=tempString.replaceAll("NUMBER","DECIMAL");
tempString=tempString.replaceAll("CLOB","TEXT");
if(tempString.indexOf("TIMESTAMP")!=-1){
tempString=tempString.replaceAll("TIMESTAMP","DATETIME");
int str = tempString.indexOf("(");
int end = tempString.indexOf(")");
System.out.println(tempString.substring(str, end+1));
tempString=tempString.replaceAll("\\("+tempString.substring(str+1, end)+"\\)", "");
}
//添加注释
if(tempString.startsWith("prompt")||tempString.startsWith("set ")||tempString.startsWith("commit;")||tempString.startsWith("spool")){
tempString = "--"+tempString;
}
//更改sql注释脚本
if(tempString.startsWith("comment on")){
tempStr = tempString;
continue;
}
if(tempString.startsWith("  is '")){
tempString = tempStr + tempString;
if(!tempString.endsWith("';")){
tempS = tempString;
tempStr = "";
continue;
}
}
if(tempString.startsWith("';")){
tempString = tempS+tempString;
tempS = "";
}
//表注释
if(tempString.startsWith("comment on table ")&&tempString.endsWith("';")){
endIndex = tempString.indexOf("  is '");
//表名
tableName = tempString.substring(17,endIndex);
String[] strA = tempString.split("'");
common = strA[1];
tempString = "EXECUTE sp_addextendedproperty N'MS_Description', N'"+common+"', N'user', N'dbo', N'table', N'"+tableName+"', NULL, NULL";
}
//列注释
if(tempString.startsWith("comment on column ")&&tempString.endsWith("';")){
endIndex = tempString.indexOf(".");
//表名
tableName = tempString.substring(18,endIndex);
String[] strA = tempString.split("'");
int endIn = strA[0].indexOf("  is");
column = strA[0].substring(endIndex+1, endIn);
common = strA[1];
tempString = "EXECUTE sp_addextendedproperty N'MS_Description', N'"+common+"', N'user', N'dbo', N'table', N'"+tableName+"', N'column', N'"+column+"'";
}
// 打印
                System.out.println(tempString);
sb.append(tempString+"\r\n");
}
reader.close();
//写入目标文件
            writer.write(sb.toString());
writer.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* @Description: 由oracle脚本转为DB2脚本
* @param oracleFile    原oracle数据库脚本文件路径
* @param db2File    转为DB2脚本的目标文件路径
*/
public static void oracleToDB2(String oracleFile,String db2File) {
File readFile = new File(oracleFile);
File writeFile = new File(db2File);
BufferedReader reader = null;
BufferedWriter writer = null;
try {
reader = new BufferedReader(new FileReader(readFile));
writer = new BufferedWriter(new FileWriter(writeFile));
StringBuffer sb = new StringBuffer();
String tempString = null;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
//System.out.println("line " + line + ": " + tempString);
//转换数据类型
tempString=tempString.replaceAll("VARCHAR2","VARCHAR");
tempString=tempString.replaceAll("NUMBER","DECIMAL");
tempString=tempString.replaceAll("CLOB","CLOB");
//添加注释
if(tempString.startsWith("prompt")||tempString.startsWith("set ")||tempString.startsWith("commit;")||tempString.startsWith("spool")){
tempString = "--"+tempString;
}
System.out.println(tempString);
sb.append(tempString+"\r\n");
}
reader.close();
//写入目标文件
            writer.write(sb.toString());
writer.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302072-1-1.html 上篇帖子: 深度分析DB2修改表 下篇帖子: [转]用于数据仓库的 DB2 产品
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表