oracle中创建存储过程出现已编译,但出现警告 最近在进行jsp开发,用到了oracle中的存储过程。现在自己写了一个存储过程,具体需求如下:数据库中有userinfo(用户表),books(书籍表),items(订单详细表),orders(订单表有如下字段oid,username【username是引用的userinfo中的】)表。现在要购买一本书籍,需要更新图书库存数量,添加订单和订单详细信息。 以下是自己写的存储过程: CREATE OR REPLACE PROCEDURE update_order(bid IN NUMBER,uname in varchar2,counts int number,price in varchar2,errors OUT NUMBER) AS errors:=1; oids int;--订单ID BEGIN savepoint mystart; --→注意:这段代码没写也是出现相同问题 insert into orders values(swq_que.nextval,uname);--插入订单表 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);--插入订单 commit; EXCEPTION WHEN others THEN errors:=0; rollback mystart; --→注意:(mystart)这段代码没写也是出现相同问题 END; 环境抛出异常如下:
【PROCEDURE update_order 已编译 Warning: 执行完毕, 但带有警告】
调用上述存储过程为: DECLARE errors NUMBER; BEGIN update_order(11,'luckytoms',1,'12',errors); DBMS_OUTPUT.PUT_LINE(errors); END;
下面这段会出现逻辑问题,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;