Oracle表结构转换SqlSERVER表结构&…

这是一个Python脚本,用于将Oracle的表结构转换为SqlSERVER格式。它读取包含Oracle创建表语句的文件,然后根据指定的转换规则修改字段类型,生成适合SqlSERVER的SQL文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在审计工作中,有时需要将Oracle的表结构修改后再SqlSERVER中创建表结构,然后将数据导入到 SqlSERVER中,在修改表结构的过程中方法狠多.手工修改,最蠢的方法,或者用工具UE批量修改,还凑合的方法,最方便的方法就是用脚本唰的一下,全部改好:

vi parameter.ini
#sysType---1:Linux;others:windows
sysType=1
#readFiledir is OldFile
readFiledir=/root/tmpmycnf/dbquery/yoon /oldfile
#writeFiledir is New File
writeFiledir=/root/tmpmycnf/dbquery/yoon /newfile



vi sql.py

#! /usr/bin/python
# -*- coding: utf-8 -*-
#Author:Yoon
#Version:1.0
#Date:2014-07-07

import os
import sys

class Application(object):
def __init__(self):
self._oldFileDir = ''
self._newFileDir = ''
self._inifilename = './parameter.ini'
self._start = 'false'

def readInitFile(self,keyName):
data = open(self._inifilename,'r')
for line in data:
if keyName == line.split('=')[0].strip():
return line.split('=')[1].strip()
break
data.close()

def getNewLine(self,oldLine):
if oldLine.strip().startswith('create table'):
tablename = oldLine.strip().split('.')[1].strip()
newline = 'create table ' + tablename + oldLine[-1]
else:
if oldLine.strip().startswith('('):
newline = oldLine
elif oldLine.startswith(')'):
newline = 'null' + oldLine[-1] + oldLine + oldLine[-1]
self._start = 'false'
else:
strList = oldLine.split(' ')
newline = ''
for string in strList:
if string == '':
newline += ' '
elif string.strip().upper().startswith('DEFAULT'):
continue
elif (string.upper() == 'NOT') or (string.upper() == 'NULL'):
continue
elif string.upper().startswith('VARCHAR2'):
newline += 'varchar(' + str(int(string[string.find('(')+1:string.find(')')])*3) + ') '
elif (string.upper() == 'NUMBER') or (string.upper() == 'DATE') or (string.upper() == 'DATETIME') or (string.upper() == 'TIMESTAMP(6)') or (string.upper() == 'INTEGER'):
newline += 'varchar(100) '
elif ((string.upper().startswith('NUMBER')) or (string.upper().startswith('DATE')) or (string.upper().startswith('DATETIME')) or (string.upper().startswith('TIMESTAMP(6)')) or (string.upper().startswith('INTEGER'))) and (string[-1] == '\n'):
newline += 'varchar(100) '
elif (string.upper().startswith('NUMBER,')) or (string.upper().startswith('DATE,')) or (string.upper().startswith('DATETIME,')) or (string.upper().startswith('TIMESTAMP(6),')) or ((string.upper().startswith('NUMBER(')) and (',' in string)) or ((string.upper().startswith('NUMBER(')) and (',' in string)) or (string.upper().startswith('INTEGER,')):
newline += 'varchar(100) null'
elif string.upper().startswith('NUMBER('):
newline += 'varchar(100)'
else:
i = 0
while (1 == 1):
if strList[i] == '':
i += 1
else:
filedName=strList[i]
break
if string == filedName:
newline = string + newline
if ',' in string:
newline += ' null'+string[string.rfind(','):]
return newline

def createNewFileFromOldFileList(self):
readFileDir = self.readInitFile('readFiledir')
writeFileDir = self.readInitFile('writeFiledir')
sysType = self.readInitFile('sysType')
if sysType == '1':
sepStr = '/'
else:
sepStr = '\\'
listfile=os.listdir(readFileDir)
for file in listfile:
start = 'false'
writeFile = open(writeFileDir+sepStr+file, 'w')
readData = open(readFileDir+sepStr+file,'r')
for line in readData:
if line.lower().startswith('create table'):
self._start = 'true'
if self._start=='true':
newLine = self.getNewLine(line)
writeFile.write(newLine)
readData.close()
writeFile.close()

app = Application()
app.createNewFileFromOldFileList()

[root@db01 ~]#
[root@yoon ~]# /usr/bin/python sql.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值