编写异常处理程序

时间:2014-03-21 03:12:57

标签: sql exception null handler

我试图创建一个异常处理程序来防止插入空值。我还想将它设置为如果它是一个空值,那么原始成本将显示在消息内部。

我的两张桌子是..

create table pitem,
(item_id  number,
item_cost  number(10,2)
);

和..

create table pitem_audit
(item_id  number,
message  char(80)
);

并且继承了程序..

create or replace procedure update_item_cost
(iItemId INTEGER,
fNewcost NUMBER) AS
fCurCost NUMBER(10,2);
missing_cost EXCEPTION;
BEGIN
   select item_cost INTO fCurCost from pitem
   where item_id=iItemId;
   IF fCurCost IS null THEN
   RAISE missing_cost;
   ELSE
   UPDATE pitem SET item_cost=fNewcost
      where item_id=iItemId;
   END IF;
COMMIT;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
     INSERT INTO pitem_audit VALUES (iItemId, 'Invalid Item identifier.');
     COMMIT;
  WHEN missing_cost THEN
     INSERT INTO pitem_audit VALUES (iItemId, 'Item cost is null.');/*<---heres where I want it to use the original cost of the item saying 'Null cost replaced by original cost of whatever the orignal was*\
     COMMIT;
  WHEN OTHERS THEN
     ROLLBACK;
     INSERT INTO pitem_audit VALUES (iItemId, 'Miscellaneous error.');
     COMMIT;
  END update_item_cost;
/

/ *这是用于调用UPDATE_ITEM_COST程序的块,以及我如何输入成本价值* \

DECLARE
 item_ident number;
 cost number;
BEGIN
 item_ident := 10;
 cost :='';
 update_item_cost(item_ident, cost);
END;
/

我的问题是如何编写异常处理程序以防止输入空值。我应该只执行ALTER TABLE语句并添加NOT NULL约束吗?另外,如何在pitem_audit表下显示消息,显示'原始成本被[original item_cost]'的原始值替换?

提前感谢:D

0 个答案:

没有答案