從SQL Server資料庫轉到Oracle資料庫的數據腳本處理

来源:http://www.cnblogs.com/wuhuacong/archive/2017/05/06/6816813.html
-Advertisement-
Play Games

在我們很多情況下的開發,為了方便或者通用性的考慮,都首先考慮SQL Server資料庫進行開發,但有時候客戶的生產環境是Oracle或者其他資料庫,那麼我們就需要把對應的數據結構和數據腳本轉換為對應的資料庫,數據結構一般來說,語法都遵循了SQL92的標準,或者我們根據不同的PowerDesigner... ...


在我們很多情況下的開發,為了方便或者通用性的考慮,都首先考慮SQL Server資料庫進行開發,但有時候客戶的生產環境是Oracle或者其他資料庫,那麼我們就需要把對應的數據結構和數據腳本轉換為對應的資料庫,數據結構一般來說,語法都遵循了SQL92的標準,或者我們根據不同的PowerDesigner文件進行生成對應的結構腳本即可,但是實際數據的腳本我們就需要進行一定的處理,以及文本的替換處理了,本文結合Notepad++的文本正則表達式替換,實現一些如日期較為特殊的數據腳本調整,把它從SQL Server轉換為Oracle的處理過程,本文就是針對這些整體的資料庫處理進行介紹。

1、資料庫設計文件及資料庫結構腳本

我們一般在做資料庫設計的時候,都會使用PowerDesigner這樣的資料庫建模工具進行設計,預設把它設計為SQL Server的資料庫設計模型,如下所示。

當然我們如果需要其他資料庫,那麼把它轉換為對應的資料庫,然後進行一定的資料庫類型調整,以及欄位的大小寫轉換即可。

 

根據這種方式我們調整後的各種資料庫設計文件如下所示。

不同的資料庫的設計模型有所差異,那麼我們進行一些核對,主要是資料庫類型的核對即可,如備註欄位的大文本應該設置為CLOB,二進位的應該調整為BLOB等

例如對於Oracle的資料庫設計(從SQL Server轉換過來的),同時也需要把它的欄位名轉換為大寫才好,在PowerDesigner裡面可以執行自定義函數進行處理。

其中在對話框選擇打開對應的大寫欄位表名的腳本,如下操作。

為了大家方便使用,我把它貼出來,供使用。

'文件:powerdesigner.ucase.VBs
'版本:1.0
'功能:遍歷物理模型中的所有表,將表名、表代碼、欄位名、欄位代碼全部由小寫改成大寫;
' 並將序列的名和代碼由小寫改成大寫。
'用法:打開物理模型,運行本腳本(Ctrl+Shift+X)
'備註:
'*****************************************************************************
dim model 'current model
set model = ActiveModel

If (model Is Nothing) Then
MsgBox "There is no current Model"
ElseIf Not model.IsKindOf(PdPDM.cls_Model) Then
MsgBox "The current model is not an Physical Data model."
Else
ProcessTables model
ProcessSequences model
End If

'*****************************************************************************
'函數:ProcessSequences
'功能:遞歸遍歷所有的序列
'*****************************************************************************
sub ProcessSequences(folder)
'處理模型中的序列:小寫改大寫
dim sequence
for each sequence in folder.sequences
sequence.name = UCase(sequence.name)
sequence.code = UCase(sequence.code)
next
end sub

'*****************************************************************************
'函數:ProcessTables
'功能:遞歸遍歷所有的表
'*****************************************************************************
sub ProcessTables(folder)
'處理模型中的表
dim table
for each table in folder.tables
if not table.IsShortCut then 
ProcessTable table
end if
next
'對子目錄進行遞歸
dim subFolder
for each subFolder in folder.Packages
ProcessTables subFolder
next 
end sub

'*****************************************************************************
'函數:ProcessTable
'功能:遍歷指定table的所有欄位,將欄位名由小寫改成大寫,
' 欄位代碼由小寫改成大寫
' 表名由小寫改成大寫 
'*****************************************************************************
sub ProcessTable(table)
dim col
for each col in table.Columns
'將欄位名由小寫改成大寫
col.code = UCase(col.code)
col.name = UCase(col.name)
next 
table.name = UCase(table.name)
table.code = UCase(table.code)
end sub

這樣處理後,我們在PowerDesigner裡面的表名及欄位就可以正常轉換為大寫了,從而可以獲得對應表的數據結構腳本,如果需要多個表,那麼可以批量生成資料庫結構腳本。

 

2、資料庫表數據腳本的生成

上面的資料庫表結構的腳本生成,只是我們資料庫遷移腳本的一部分操作,有時候我們實際的框架或者業務系統裡面,都往往有一些基礎數據需要寫入的,那麼就需要我們構建對應的數據腳本了。

在資料庫腳本導出的,我們可以使用很多工具,如SQL Server本身的工具就可以導出數據的SQL腳本,同時我們也可以利用其它資料庫管理工具,如Toad For SQLServer或者Navicat Premium等資料庫管理工具實現數據的導出腳本操作。

然後在生成腳本的過程中,設置輸出的高級選項中的“要編寫腳本的數據的類型”為【僅限數據】即可,如下所示。

不過預設採用SQLServer生成出來的數據腳本,對日期類型轉換真不是很好,如下結果所示。

因此我使用更加直觀顯示的Navicat Premium 工具來處理資料庫的數據腳本。使用Navicat Premium生成的腳本如下所示(僅僅日期類型有所不同)。

獲得生成的數據腳本如下所示。

剩下的工作就是我們對這些數據腳本進行進一步的處理操作了。

 

3、數據表的數據腳本的替換處理

上面介紹了通過工具來獲得正確的數據腳本,我們使用了Navicat Premium或者 Toad For SQLServer都能夠獲得類似下麵格式的時間腳本。

 N'2016-06-22 10:35:36.590'

這樣我們為了處理為Oracle的日期數據,那麼需要轉換為

to_date('2016-06-22 10:35:36','yyyy-MM-dd HH24:mi:ss')

這樣的格式

 那麼我們對上面的腳本,進行一定規則的處理,如替換:[dbo]. [ ] N'為' 等常規文本處理後,還需要再進行正則表達式規則的處理才可以,例如我們的日期替換的正則表達式如下:

'(\d{4}-\d{2}-\d{2}\s*\d{2}:\d{2}:\d{2})\.\d{3}'
to_date\('\1','yyyy-MM-dd HH24:mi:ss'\)

如下所示。

最後使用正則表達式替換後的資料庫腳本如下所示。

 

4、數據腳本在PL-SQL Developer工具上執行操作

上面介紹如何實現了表數據的腳本生成,有了這些腳本,我們需要使用Oracle的資料庫管理工具 PL-SQL Developer工具進行數據導入,才能最終完成整個過程。這個操作也是有所講究的。

例如我們創建各類不同的資料庫腳本,那麼只需要按照順序加入或者選擇加入執行資料庫腳本即可。

那麼執行這些SQL,該如何操作呢,是不是直接拖動到PL-SQL上就可以了?

當然不是,否則長一點的資料庫腳本,就可能導致非常遲緩的執行效率。

一般可以通過兩種方式,一種是使用命令行的方式。

這種方式執行速度非常快,比起直接在PL-SQL的SQL視窗上執行更有效率。

另外一種方式,就是可以利用PL-SQL裡面的另外一個地方進行執行資料庫腳本,如下所示。

在【 工具】【導入表】的操作裡面,彈出一個對話框,也是執行腳本高效的操作之一。

上面介紹的這些方式,就是在資料庫沒有的情況下,根據資料庫腳本構建對應的數據對象和數據的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文地址 原文地址--微信 點擊關註 微信公眾號 手機眾生相 手機大家都不陌生,不管你拿的是高逼格的蘋果手機,還是親民的安卓手機,甚至你固執地懷舊拿著諾基亞的手機,都無損於你低頭一族的一員。地鐵里,商場中,工作時,回家中,大家也都是埋著頭,神情專註地看著自己的手機,或是來把《王者榮耀》殺個頭破血流, ...
  • 目前安卓開發中使用的網路工具為OKhttp,但是okhttp的使用還不是很方便,在okhttp的基礎上再對請求進行封裝會極大的方便網路調用。 下麵直接上代碼。 請求封裝 上面對okhttp的put請求進行了簡單封裝,四個參數分別是 1.請求地址 2.請求頭,以map的形式傳入,如不需要可傳入null ...
  • iOS:詳細的正則表達式 1、簡介: 在項目中,正則的使用是很普遍的,例如登錄賬號和密碼(手機號、郵箱等)。用到的方法就是謂詞對象過濾:NSPredicate。 2、什麼是正則表達式: 正則表達式,又稱正規表示法,是對字元串操作的一種邏輯公式。正則表達式可以檢測給定的字元串是否符合我們定義的邏輯,也 ...
  • iOS 真機測試錯誤“The application bundle does not contain a valid identifier” 真機測試的時候報錯:“The application bundle does not contain a valid identifier”。在這裡找到解決方 ...
  • 本文旨在提供最基本的,可以用於在生產環境進行Hadoop、HDFS分散式環境的搭建,對自己是個總結和整理,也能方便新人學習使用。 一、基礎環境 在Linux上安裝Hadoop之前,需要先安裝兩個程式: 1.1 安裝說明 1. JDK 1.6或更高版本(本文所提到的安裝的是jdk1.7); 2. SS ...
  • 所謂的預處理技術,最初也是由MySQL提出的一種減輕伺服器壓力的一種技術! 傳統mysql處理流程 1, 在客戶端準備sql語句 2, 發送sql語句到MySQL伺服器 3, 在MySQL伺服器執行該sql語句 4, 伺服器將執行結果返回給客戶端 這樣每條sql語句請求一次,mysql伺服器就要接收 ...
  • 這兩天在自己的windows7上安裝了一下MySQL資料庫,安裝使用的是5.7.18版本的 noinstall Zip Archive安裝包mysql-5.7.18-win32.zip。由於5.7版本相對5.6版本發生了一下變化,很多網上的安裝教程都失效了,因此在安裝過程中遇到了一系問題,在這裡根據 ...
  • MySQL基本概念以及簡單操作 一、MySQL MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬於Oracle 旗下產品。MySQL 是最流行的關係型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Ma ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...