还有就是这个savepoint mystart具体是什么意思,电加热炉温度控制系统的设计为什么网上有些人写的存储过程也不用这个,请赐教!!
这个就是一个保存点,如果有多个保存点,rollback的时候可以选择rollback到哪个保存点。
对于你的这个过程,可以把savepoint mystart这句去掉,把最后的rollback语句直接写成rollback即可
errors:=1;--这个要放在BEGIN之后,AS之后BEGIN之前是声明变量的,不能直接给参数赋值
下面这段会出现逻辑问题,LZ稍微测试下就知道。假设swq_que初始值=0
insert into orders values(swq_que.nextval,uname);--插入订单表--这里的订单ID=1
select oid into oids from orders where username=uname;--订单ID赋值
update books set stock=stock-10 where bid=bid;--更新库存
insert into items values(swq_que.nextval,oids,bid,sysdate,counts,price,counts*price);--插入订单--但是这里的订单ID=2
调用上述存储过程为:
DECLARE
errors NUMBER;
BEGIN
update_order(11,'luckytoms',1,'12',errors);
DBMS_OUTPUT.PUT_LINE(errors);
END;
异常如下:
【错误报告:
ORA-06550: 第 4 行, 第 3 列:
PLS-00905: 对象 QUE.UPDATE_ORDER 无效 --说明你的存储过程编译未通过。。。对象无效,因为errors:=1的位置不正确。。。