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