Posted on 2010-04-23 10:46
Prayer 閱讀(231)
評論(0) 編輯 收藏 引用 所屬分類:
DB2
要關上
選項,可以在選項字母前后加上減號(-c-),或者在前面加上加號(+)。再解釋一下前兩句話,因為這可能有點兒混亂:在標志前面 放上減號會打開 選項;在標志前面 和后面 都放上減號,或者在標志前面放上加號 會關上
選項。不,這么說還是不太明確(嗨,我沒有寫出代碼)。因為這可能導致混淆,我們用自動提交選項舉個例子。
一些命令行選項是默認打開的,其他的是默認關上
的。前面的解釋(和后面的示例)描述默認打開的命令行選項的行為和效果。如果命令行選項是默認關上
的,那么運用
相反的邏輯。
在默認情況下,自動提交特征
是打開的(-c)。這個選項指定每個語句能不能
自動提交或回滾。
如果一個語句成功了,它就和它前面執行的關上
了自動提交(+c 或 -c-)的所有成功語句一起提交。但是,如果它失敗了,它就和它前面執行的關上
了自動提交的所有成功語句一起回滾。如果這個語句關上
了自動提交,就必須顯式地執行提交或回滾命令。
在下圖中,在命令行上修改了自動提交特征
的值來演示這個流程
。
在運行時修改命令行選項

那么,發生了什么情況?首先,我建立
了一個稱為 A 的表,但是在執行這個任務時運用
+c 選項關上
了默認的自動提交選項。(也可以在這個標志前后加上減號[-c-],效果是一樣的。)在建立
表 A 之后(請記得
,沒有提交這個操作),我建立
了另一個稱為 B 的表,這一次也關上
了自動提交特征
。然后對這兩個表執行
Cartesian 聯結,同樣動態地關上
DB2 CLP 的自動提交特征
。最后,做一次回滾并再次運行同樣的 SELECT 語句,這一次這個語句失敗了。
如果您看看這個事務,就會發覺
我沒有執行提交操作。如果第一個 SELECT 沒有包含 +c 選項,那么就會提交建立
表 A 和 B 的結果(因為這個 SELECT 成功了);因此后面的回滾不會影響這兩個已經提交的表,第二個 SELECT 語句會成功地返回與第一個 SELECT 語句相同的結果。
試一下相同的命令序列,但是這一次運用
-c- 選項。應該會看到同樣的結果。在此之后,再試一次,這一次在第一個 SELECT 語句中不運用
任何選項,看看第二個 SELECT 能不能
會返回結果。
您的操作系統可能對在一個語句中可以讀取的最大字符數量有限定
(即使命令行在顯示器上轉入下一行)。為了在輸入長語句時處理
這個限定
,可以運用
續行字符()。當 DB2 遇到續行字符時,它讀取下一行并在處理時將兩行合并。在兩種 DB2 處理程序中都可以運用
這個字符;但是,要知道 DB2 對一個語句的限定
是 2 MB(這對于命令行應該足夠了)。下圖演示了它在 DB2 CLP 中的運用
要領