【发布时间】:2014-03-25 23:17:32
【问题描述】:
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);
--但无济于事...--
【问题讨论】:
标签: sql oracle stored-procedures plsql insert