在审计工作中,有时需要将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. 【Unity Shaders】学习笔记——SurfaceShader(八)生成立方图

    [Unity Shaders]学习笔记——SurfaceShader(八)生成立方图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5630261.html ...

  2. 【测试】通过SYS用户,对SCOTT用户的会话进行跟踪,并分析此会话中性能消耗较高的SQL,分析并给出优化建议。

    ①连接到scott下,查询scott对应的sid,serial# SQL> select sid,serial#,username from v$session where username=' ...

  3. 学习总结 java 数据库 ResultSet 、PreparedStatement

    package com.hanqi.test; import java.sql.*; public class jdbcTest { public static void main(String[] ...

  4. CLRS:Max_sunsequence_sum O(n*n) O(nlgn) O(n)

    #include<stdio.h>#include<stdlib.h>#include<time.h>#define ARRAY_SIZE 1000int buf ...

  5. 深入了解Qt(二)之元对象系统(Meta-Object System)

    深入了解Qt主要内容来源于Inside Qt系列,本文做了部分删改,以便于理解.在此向原作者表示感谢! 在Qt Meta Object System-元对象系统这篇文章中,从底层实现的源码剖析了元对象 ...

  6. 按照 where id in ()排序

    select * from ibs6_terminal_adv_inf where id in (16,14,15) order by find_in_set(id,'16,14,15')

  7. undefined reference to `pthread_create'问题解决

    在编译pthread有关的程序时,出现undefined reference to `pthread_create'这样的错误. 问题原因: pthread 库不是 Linux 系统默认的库,连接时需 ...

  8. 条款20 STL函数对象

    继承标准STL的函数对象 1: struct PopLess : public atd::binary_function<state,state,bool> 2: { 3: bool op ...

  9. ADO.NET中的Connection详解

    连接字符串 1.写法一 "Data Source=服务器名; Initial Catalog=数据库; User ID =用户名; Password=密码; Charset=UTF8; &q ...

  10. css的#和.的区别

    css的#和.的区别, css的#和.的区别 2009-03-04 14:43fyws  分类:Html/Css | 浏览 1911 次 css的#和.的区别如:#home #h3 { padding ...