我试图创建一个异常处理程序来防止插入空值。我还想将它设置为如果它是一个空值,那么原始成本将显示在消息内部。
我的两张桌子是..
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