如何使用腳本加速DB2存儲(chǔ)過程開發(fā)?

7年前 (2018-07-03)閱讀803回復(fù)0
三寸光陰七寸執(zhí)念
三寸光陰七寸執(zhí)念
  • 管理員
  • 發(fā)消息
  • 注冊(cè)排名429
  • 經(jīng)驗(yàn)值220
  • 級(jí)別管理員
  • 主題44
  • 回復(fù)0
樓主

??在針對(duì) DB2 存儲(chǔ)過程的開發(fā)中,您是否覺得 DB2 提供的開發(fā)工具雖然功能強(qiáng)大,但是執(zhí)行速度較慢,稍顯笨重,而我們的日常開發(fā)中僅僅使用了一些比較常用的功能。你是否覺得雖然其工具操作起來比較直觀,但是在處理大量創(chuàng)建、修改操作或者重復(fù)執(zhí)行一些操作時(shí)就會(huì)比較費(fèi)時(shí)?是否感覺使用其工具,無法方便的記錄跟蹤我們執(zhí)行過的操作?如果您有上述的問題,本文會(huì)給您提供一個(gè)解決辦法——使用 Windows 腳本進(jìn)行 DB2 存儲(chǔ)過程開發(fā)。

??腳本通常執(zhí)行速度快捷,靈活;善于處理批量操作;以文本格式編寫的腳本也方便我們查看具體我們執(zhí)行了哪些操作。腳本的特點(diǎn)恰恰幫助我們解決了剛剛提到的問題。

本文主要討論使用 Windows 腳本與 DB2 交互的一些常用技巧和方法。介紹了利用 Windows 的腳本(批處理程序)連接數(shù)據(jù)庫,查詢表結(jié)構(gòu),UDF之間的引用關(guān)系,存儲(chǔ)過程中使用了哪些表等等。

??同時(shí)通過一個(gè)演示項(xiàng)目的開發(fā)過程的介紹來展示如何使用文中的腳本進(jìn)行開發(fā)。

背景知識(shí)簡(jiǎn)介

Windows 腳本常用命令

Windows 腳本也稱之為批處理程序,是一個(gè)包含了一些需要順序執(zhí)行的 Windows 命令的文本文件,其擴(kuò)展名為 bat 或 cmd。

??由于本文的腳本需要傳入?yún)?shù),讀者需要在控制臺(tái)中執(zhí)行本文提供的 Windows 腳本。

下面是 Windows 中的一些常用命令和符號(hào)。這里僅僅列出一些說明,如果想了解 Window 命令的詳細(xì)信息,請(qǐng)參考本文提供的參考資料。

REM:行注釋命令,它不會(huì)被執(zhí)行,只是起一個(gè)注釋的作用,便于代碼的閱讀和維護(hù);

ECHO:命令主要參數(shù)有 OFF 和 ON,用于控制是否在控制臺(tái)上顯示正在執(zhí)行的命令。

??也可以使用 ECHO message 來顯示一個(gè)特定的消息;

GOTO: 即為跳轉(zhuǎn)的意思。在腳本中以“:XXX”構(gòu)建一個(gè)標(biāo)號(hào)然后用GOTO XXX 來執(zhí)行標(biāo)號(hào)后的命令;

CALL: 命令用于在主腳本執(zhí)行過程中調(diào)用子腳本,當(dāng)子腳本執(zhí)行完畢后再繼續(xù)執(zhí)行主腳本。

??如果我們不使用 CALL 來調(diào)用子腳本,而是在主腳本中直接調(diào)用子腳本,那么被調(diào)用的子腳本執(zhí)行完畢,也就表示主腳本執(zhí)行的完畢,主腳本后續(xù)的命令將不會(huì)被執(zhí)行;

PAUSE: 暫時(shí)停止腳本的執(zhí)行;

PROMPT: 修改命令提示符。PROMPT [text]。

??text 表示新的提示符。 $P 代表當(dāng)前路徑,$G 代表 >;

START: 打開一個(gè)新的窗口執(zhí)行某個(gè)命令。如果 START 后面跟的是一個(gè)文件名,那么 Windows 會(huì)調(diào)用打開該種文件的程序?qū)⑵浯蜷_。例如,如果你設(shè)定 notepad(記事本)為 *。

??log 文件的打開程序。那么執(zhí)行 START my。log 命令后,Windows 會(huì)啟動(dòng) notepad(記事本)程序,并且打開 my。log 文件;

符號(hào)(@):@ 符號(hào)可以關(guān)閉當(dāng)前命令行的回顯。我們從上面知道用命令 echo off 可以關(guān)掉整個(gè)批處理的命令回顯但卻不能不顯示 echo off 這個(gè)命令。

??現(xiàn)在我們?cè)谶@個(gè)命令前加上 @,這樣 echo off 這一命令就被 @ 關(guān)閉了回顯,從而達(dá)到所有命令均不回顯的要求;

管道(輸出重定向)命令 > 和 >>:將命令輸出的結(jié)果重定向到特定文件中, > 與 >> 的區(qū)別在于,> 會(huì)清除文件中原來的內(nèi)容,然后把輸出結(jié)果寫入文件,而 >> 只會(huì)追加內(nèi)容到文件中,而不會(huì)改動(dòng)其中原有的內(nèi)容;

Windows 腳本參數(shù):我們可以向腳本傳遞參數(shù),并且可以在腳本中通過 %n 來引用。

??腳本每次能處理的變量從 %0~%9 共 10 個(gè)。其中 %0 默認(rèn)為批處理的文件名。

DB2 CLP 簡(jiǎn)介

DB2 Command Line Processor(DB2 CLP)是所有 DB2 產(chǎn)品中都有的,可以使用這個(gè)應(yīng)用程序運(yùn)行 DB2 命令、操作系統(tǒng)命令或 SQL 語句。

??DB2 CLP 可以成為強(qiáng)大的工具,因?yàn)樗軌驅(qū)⒔?jīng)常使用的命令或語句序列存儲(chǔ)在批處理文件中,可以在必要的時(shí)候運(yùn)行這些批處理文件。在 Windows 系統(tǒng)中,必須先(從普通命令窗口)運(yùn)行 db2cmd 命令來啟動(dòng) DB2 命令行環(huán)境。

在什么時(shí)候使用本文介紹的腳本?

腳本的優(yōu)勢(shì)在于可以重復(fù)執(zhí)行。

??如果一個(gè)任務(wù)會(huì)被執(zhí)行多次,或者被多人執(zhí)行。那么將該任務(wù)編寫成腳本會(huì)提高任務(wù)的執(zhí)行效率和準(zhǔn)確性。本文介紹的腳本都是一些在我們進(jìn)行存儲(chǔ)過程開發(fā)和調(diào)試中經(jīng)常用到的。讀者在后面會(huì)漸漸體會(huì)到腳本給我們帶來的便利。

DB2 系統(tǒng)表的功能

編寫針對(duì) DB2 的腳本,我們需要首先了解 DB2 為我們提供了哪些命令和信息。

??DB2 為我們提供了大量的命令例如連接數(shù)據(jù)庫,執(zhí)行一個(gè) SQL 文件,獲得表結(jié)構(gòu)的信息等等。我們會(huì)在下面解釋具體的腳本的同時(shí)對(duì)一些簡(jiǎn)單的 DB2 命令進(jìn)行解釋說明。同時(shí),DB2 把數(shù)據(jù)庫對(duì)象的很多信息都存儲(chǔ)到了系統(tǒng)表中。熟悉這些系統(tǒng)表就能夠通過 SQL 語句獲得我們需要的信息。

??下面我們先來學(xué)習(xí)一下 DB2 系統(tǒng)表。

在 DB2 數(shù)據(jù)庫被創(chuàng)建的時(shí)候,DB2 會(huì)創(chuàng)建一些系統(tǒng)表。這些系統(tǒng)表中記錄了所有數(shù)據(jù)庫對(duì)象的信息,表或視圖的列的數(shù)據(jù)類型,約束的定義,對(duì)象的權(quán)限和對(duì)象之間的依賴關(guān)系等。這些系統(tǒng)表的模式為 SYSIBM,其表名以 SYS 作為前綴。

??例如: SYSTABLES、SYSVIEWS 等等。DB2 為這些系統(tǒng)表建立了相對(duì)應(yīng)的只讀視圖。這些視圖的模式是 SYSCAT,它們的內(nèi)容是其相對(duì)應(yīng)的系統(tǒng)表的全部或者部分內(nèi)容。這些視圖的名字沒有 SYS 的前綴。例如:SYSCAT。TABLES 是 SYSIBM。

??SYSTABLES 的視圖。

我們可以通過 LIST TABLES FOR SYSTEM 或 LIST TABLES FOR SCHEMA schemaname 命令查看所有的系統(tǒng)表和相關(guān)的視圖信息。下面我們會(huì)介紹一些本文用到的系統(tǒng)表和視圖。

SYSCAT。TABLES:數(shù)據(jù)庫中對(duì)象的信息,包括 table,view,nickname 和 alias 的一些定義。詳細(xì)說明見表 1。 表 1。 SYSCAT。TABLES 視圖的說明 列名數(shù)據(jù)類型描述 TABSCHEMAVARCHAR(128)記錄 schema 的名字 TABNAMEVARCHAR(128)記錄數(shù)據(jù)庫對(duì)象的名稱。

??包括表、視圖、別名等 TYPECHAR

(1)表示該數(shù)據(jù)庫對(duì)象是表,視圖還是別名 (’T’表示table; ’V’表示 view; ’N’ 表示nickname; ’A’ 表示 alias。) COLCOUNTSMALLINT表或視圖中列的個(gè)數(shù) ……

SYSCAT。

??VIEWS:視圖的定義信息。詳細(xì)說明見表 2。 表 2。 SYSCAT。VIEWS 視圖的說明 列名數(shù)據(jù)類型描述 VIEWSCHEMAVARCHAR(128)視圖的 Schema VIEWNAMEVARCHAR(128)視圖名稱 READONLYCHAR

(1)視圖是否只讀:

Y = 視圖是只讀

N = 視圖不是只讀

VALIDCHAR

(1)視圖狀態(tài)是否合法:

Y = 視圖狀態(tài)合法(valid)

X = 視圖狀態(tài)不合法(invalid)

TEXTCLOB (64K)視圖的源程序(DDL) ……

SYSCAT。

??ROUTINES:DB2 UDF,系統(tǒng)方法(system-generated method),用戶定義方法(user-defined method)和存儲(chǔ)過程(SP)的定義。我們可以認(rèn)為該視圖包含了數(shù)據(jù)庫中程序的定義。

0
0
收藏0
回帖

如何使用腳本加速DB2存儲(chǔ)過程開發(fā)? 期待您的回復(fù)!

取消
載入表情清單……
載入顏色清單……
插入網(wǎng)絡(luò)圖片

取消確定

圖片上傳中
編輯器信息
提示信息