要關(guān)上
選項(xiàng),可以在選項(xiàng)字母前后加上減號(hào)(-c-),或者在前面加上加號(hào)(+)。再解釋一下前兩句話,因?yàn)檫@可能有點(diǎn)兒混亂:在標(biāo)志前面 放上減號(hào)會(huì)打開 選項(xiàng);在標(biāo)志前面 和后面 都放上減號(hào),或者在標(biāo)志前面放上加號(hào) 會(huì)關(guān)上
選項(xiàng)。不,這么說還是不太明確(嗨,我沒有寫出代碼)。因?yàn)檫@可能導(dǎo)致混淆,我們用自動(dòng)提交選項(xiàng)舉個(gè)例子。
一些命令行選項(xiàng)是默認(rèn)打開的,其他的是默認(rèn)關(guān)上
的。前面的解釋(和后面的示例)描述默認(rèn)打開的命令行選項(xiàng)的行為和效果。如果命令行選項(xiàng)是默認(rèn)關(guān)上
的,那么運(yùn)用
相反的邏輯。
在默認(rèn)情況下,自動(dòng)提交特征
是打開的(-c)。這個(gè)選項(xiàng)指定每個(gè)語句能不能
自動(dòng)提交或回滾。
如果一個(gè)語句成功了,它就和它前面執(zhí)行的關(guān)上
了自動(dòng)提交(+c 或 -c-)的所有成功語句一起提交。但是,如果它失敗了,它就和它前面執(zhí)行的關(guān)上
了自動(dòng)提交的所有成功語句一起回滾。如果這個(gè)語句關(guān)上
了自動(dòng)提交,就必須顯式地執(zhí)行提交或回滾命令。
在下圖中,在命令行上修改了自動(dòng)提交特征
的值來演示這個(gè)流程
。
在運(yùn)行時(shí)修改命令行選項(xiàng)

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