閱讀下列說(shuō)明,回答問(wèn)題1至問(wèn)題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
某航空售票系統(tǒng)負(fù)責(zé)所有本地起飛航班的機(jī)票銷售,并設(shè)有多個(gè)機(jī)票銷售網(wǎng)點(diǎn)。以下為E-SQL編寫的部分售票代碼:
請(qǐng)根據(jù)上述描述,完成下列問(wèn)題:
【問(wèn)題1】(5分)
上述售票程序,在并發(fā)狀態(tài)下,可能發(fā)生什么錯(cuò)誤?產(chǎn)生這種錯(cuò)誤的原因是什么?
【問(wèn)題2】(6分)
若將上述代碼封裝成一個(gè)完整的事務(wù),則:
(1)在并發(fā)請(qǐng)求下的響應(yīng)效率會(huì)存在什么問(wèn)題?
(2)分析產(chǎn)生效率問(wèn)題的原因。
(3)給出解決方案。
【問(wèn)題3】(4分)
下面是改寫的存儲(chǔ)過(guò)程,其中flightno為航班號(hào);a為購(gòu)票數(shù);result為執(zhí)行狀態(tài):1表示成功,0表示失敗;表tickets中的剩余機(jī)票數(shù)balance具有大于等于零約束。請(qǐng)補(bǔ)充完整。
CREATE PROCEDRUE buy_ticket(char[] flightno IN, (a) , int resuit OUT)
AS
BEGIN
.........
UPDATE tickets SET balance= (b)
WHERE flight= flightno;
if (SQLcode<>SUCCESS) { //SQLcode為SQL語(yǔ)句的執(zhí)行狀態(tài)
(c) ;
result = 0; return;
}
COMMIT;
(d)
END