在审计工作中,有时需要将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

Oracle表结构转换SqlSERVER表结构 脚本的更多相关文章

  1. Bat脚本备份sqlserver 表结构、存储过程、函数、指定表数据

    Bat脚本备份sqlserver 表结构.存储过程.指定表数据: @echo off cd /d %~dp0 ::备份表结构.存储过程和部分配置表的数据 set LogFile=report.log ...

  2. SqlServer表结构查询

    一.前言 近两天项目升级数据迁移,将老版本(sqlserver)的数据迁移到新版本(mysql)数据库,需要整理一个Excel表格出来,映射两个库之间的表格字段,示例如下: Mysql数据库查询表结构 ...

  3. Oracle数据库体系结构及创建表结构

    Oracle服务器主要由实例.数据库.程序全局区和前台进程组成,其中实例就是用来提供管理数据库的功能:数据库由数据库文件组成,用来存储系统数据:实例可以进一步划分为系统全局区(SGA)和后台进程(PM ...

  4. SQLServer 表结构相关查询(快速了解数据库)

    -- 表结构查询 SELECT 表名 then d.name else '' end, 表说明 then isnull(f.value,'') else '' end, 字段序号 = a.colord ...

  5. oracle复制表数据,复制表结构

    1.不同用户之间的表数据复制 2.同用户表之间的数据复制 3.B.x中个别字段转移到B.y的相同字段 4.只复制表结构 加入了一个永远不可能成立的条件1=2,则此时表示的是只复制表结构,但是不复制表内 ...

  6. sqlserver数据库导出表结构和表数据生成创建表和insert语句

    问题描述: 有时候我们只需要导出一张表和表数据到另外一个数据库,如果是备份整个库的话,就会很麻烦那样,没法满足需求. 解决方法: 以sqlserver2014为例:把MGActivity数据库的bat ...

  7. Oracle和sql server中复制表结构和表数据的sql语句

    在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...

  8. oracle 复制表数据,复制表结构

    1.不同用户之间的表数据复制 对于在一个数据库上的两个用户A和B,假如需要把A下表old的数据复制到B下的new,请使用权限足够的用户登入sqlplus:insert into B.new(selec ...

  9. 利用powerDesigner15.1连接oracle数据库并自动生成表结构

    利用powerDesigner15.1连接oracle数据库并自动生成表结构 参考:http://blog.csdn.net/qq_24531461/article/details/76713802 ...

随机推荐

  1. JavaScript数据结构,队列和栈

    在JavaScript中为数组封装了大量的方法,比如:concat,pop,push,unshift,shift,forEach等,下面我将使用JavaScript提供的这些方法,实现队列和栈的操作. ...

  2. 学习练习 java产生6个不同的数字

    public static void main(String[] args) { Random r=new Random(); int arr[]=new int[6]; for(int i=0;i& ...

  3. java.lang.Exception: Socket bind failed: [730013] An attempt was made to acc

    在CMD命令行中启动运行startup.bat,启运程序总是闪退,查看日志发现如下错误: 26-Jan-2016 18:12:34.463 SEVERE [main] org.apache.coyot ...

  4. 可视化数据包分析工具-CapAnalysis

    可视化数据包分析工具-CapAnalysis 我们知道,Xplico是一个从pcap文件中解析出IP流量数据的工具,本文介绍又一款实用工具-CapAnalysis(可视化数据包分析工具),将比Xpli ...

  5. dell 交换机 双链路冗余

    公司海外机房引入2G带宽,是由2个电口绑定实现的.因业务需要扩容到3G,在绑定端口扩展性不太好,因此直接上10G光纤模块. 机房技术人员建议,2g老线路不撤做备份,3g新线路在线使用.使用STP协议实 ...

  6. c programming language ___ 5_2.c

    #include <stdio.h> #include <ctype.h> #define BUG printf("here!bug!\n"); int g ...

  7. jquery控制元素的淡入淡出切换

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. Android带返回值的窗口跳转

    1.AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest ...

  9. 著名的二分查找的BUG

    int binarySearch(int a[], int key, int length) { int low = 0; int high = length - 1; while (low < ...

  10. C++ 必知必会:条款16 指向成员函数的指针并非指针

    这一点与指向成员的指针类似,其实现可能更加复杂,因为成员函数同时还存在虚拟函数,需要动态绑定执行动作.当然这种属性是属于函数本身的,此处表达的是指针不涉及函数的属性问题. 1: class shape ...