阅读以下技术说明,根据要求回答下列问题。
[说明]
某省会城市××长途汽车售票系统负责所有本地长途汽车站各班次的汽车票销售,并在该省会城市和全省主要地级市设有多个该长途汽车票销售网点,各售票网点使用相同的售票程序。假设售票程序中用到的伪指令如表所示。
伪指令含义 | |
伪指令 | 说明 |
R(A,x) | 返回长途汽车班次A当前的剩余汽车票数给变量x |
W(A,x) | 将当前数据库中长途汽车班次A的剩余汽车票数置为x |
R(A,x),W(A,x~n)
根据上述业务及规则,完成下列问题。
下面是用E-SQL实现可串行化调度的长途汽车票销售程序的一部分,请补全空缺处的代码。
EXEC SQL SET TRANSACTION ISOLATION LEVEL ______
EXEC SQL SELECT balance INTO :x FROM tickets WHERE flight=’A’;
printf("长途汽车班次 A 当前剩余汽车票数为:%d\n请输入购票数:",x);
scanf("%d",&a);
x=x-a;
if (x<0)
EXEC SQL ROLLBACK WORK;
printf("票数不够,购票失败!");
else{
EXEC SQL UPDATE tickets SET ______ WHERE_flight=’A’;
if (SQLCA.sqlcode<>SUCCESS)
EXEC SQL ______;
else
EXEC SQL ______;
}
参考答案:SERIALIZABLE
balance=:x
ROLLBACK WORK
COMMIT WORK
解析:这是一道要求读者掌握2PL协议理论与SQL中的隔离级别,以及嵌入式SQL的编程实践题。依题意,在题干所给出的长途汽车票销售程序中,空缺处要补充的是可串行化调度级别,即SERIALIZABLE。
空缺处要补充的是嵌入式SQL的更新语句,即应填入balance=:x。
空缺要补充的是嵌入式SQL中的事务回退语句,即应填入ROLLBACK WORK,以表示事务执行不成功时通知系统已发生错误,数据库可能处在不正确的状态,该事务对数据库的所有更新必须被撤销,数据库应恢复该事务到初始状态。
空缺要补充的是嵌入式SQL中的事务提交语句,即应填入COMMIT WORK,以表示事务执行成功地结束。此时告诉系统,数据库要进入一个新的正确状态,该事务对数据库的所有更新都已交付实施(写入磁盘)。