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, 'Null value replaced by original cost of '||TO_CHAR(fCurCost));
COMMIT;
WHEN too_many_rows THEN
INSERT INTO pitem_audit
VALUES (iItemId, 'More than one row for this item: both rows deleted, new row inserted');
COMMIT;
WHEN OTHERS THEN
ROLLBACK;
INSERT INTO pitem_audit
VALUES (iItemId, 'Miscellaneous error.');
COMMIT;
END update_item_cost;
/
- 我的问题是处理missing_cost异常的块的语法。 我的消息字符串只显示'空值被原始代价替换'...我需要它包含fCurCost,但由于某种原因它不显示...我不断收到一个警告说:用编译错误创建的过程。 -插入值语句的语法错误
- 也是TOO_MANY_ROWS异常处理程序...我将如何编写代码以删除多行???我已经试过:
DELETE FROM pitem
WHERE item_id NOT IN(SELECT MAX(item_id)
FROM pitem
GROUP BY item_id, item_cost);
- 但无济于事...--