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);
- 但無濟於事...--