阅读以下说明,根据要求回答下列问题。
[说明]
某商场客户一商品数据库中的各关系模式如下。
客户(客户号,姓名,性别,年龄)
商品(商品号,名称,型号,品牌,单价,库存)
销售(流水号,
客户号
,商品号
,数量,日期)采购(商品号,数量)
其中:
(1)一种品牌的同一名称商品可以有多个型号,商品的库存有大于等于0的约束。
(2)销售表记录每一笔销售,每销售一件商品,其库存都要做相应的修改。
现假定已经建立了该数据库及上述4个基本表。
实现销售业务的嵌入式SQL代码段(嵌入C语言)如下,假设销售表的流水号由系统自动生成。请将空缺部分补充完整。
…
EXEC SQL BEGIN DECLARE SECTION;
/*销售:商品号,客户号,数量,日期*/
char pno[6]; char cno[6];
int quantity; char date[10];
EXEC SQL END DECLARE SECTION;
…
EXEC SQL CONNECT TO DEFAULT;
EXEC SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
EXEC SQL INSERT INTO 销售(商品号,客户号,数量,日期)
VALUES (______);
EXEC SQL UPDATE 商品 SET 库存=______ WHERE 商品号=:pno;
if(SQLCA.SQLCODE!=0){
printf("商品%s库存不满足本次购买数量,交易失败!",pno);
EXEC SQL ROLLBACK WORK;
}else{
EXEC SQL ______;
}
EXEC SQL DI SCONNECT CURRENT;
…
参考答案::pno,:cno,:quantity,:date
库存-:quantity
COMMIT WORK或COMMIT
解析:这是一道要求读者掌握嵌入式SQL的综合分析题,本题的解答思路如下。
空缺处考查嵌入式SQL程序中主变量的应用,处应填入“:pno,:cno,:quantity,:date”,处应填入“库存-:quantity”。
每执行完一个SQL语句,SQLCA中的SQLCODE给出该语句执行的结果情况。根据嵌入C程序流程可知,else表示SQL语句能成功执行的分支,因此空缺处应填入“COMMIT WORK(或COMMIT)”。