我试图使用触发器在第三方ERP应用程序中抛出自定义错误。 以下是正常运行的代码。
CREATE OR REPLACE TRIGGER Rec_Traceability
BEFORE INSERT ON rec
FOR EACH ROW
DECLARE
RecJob NUMBER;
OperationCode VARCHAR2(15);
CCCode VARCHAR2(10);
IssQty NUMBER;
RecQty NUMBER;
is_wip NUMBER;
IssueLow EXCEPTION;
PRAGMA exception_init(IssueLow,-20001);
BEGIN
SELECT ITEM_WIP into is_wip FROM item WHERE item_code = (:new.item_code);
IF (is_wip = 1) THEN
SELECT JOB_NO, OPCLASS_CODE, CC_CODE into RecJob, OperationCode, CCCode FROM JOBOP WHERE JOBOP_ID = :new.JOBOP_ID;
--Total issued in meters from the operation
--SELECT ISS_ID, ISS.ITEM_CODE, ISS.REC_ID, ISS.ISS_QTY, JOBOP_ID, OPCLASS_CODE, CC_CODE, JOBOP_QTY, ESTOP_QTY, nvl(ruleit_val,1), iss_qty*nvl(ruleit_val,1)
SELECT nvl(sum(iss_qty*nvl(ruleit_val,1)),0) into IssQty
FROM iss, ruleit, jobop
WHERE iss.item_code = ruleit.item_code(+)
AND jobop.jobop_id = to_number(iss.iss_code)
AND (urule_code = 'Kg2Meter' or iss.unit_code = 'm')
AND OPCLASS_CODE LIKE 'Print%'
AND iss.job_no = RecJob; --88280
--Total receipt qty in meters from the operation
--SELECT REC.ITEM_CODE, REC.REC_QTY, REC.UNIT_CODE, JOB_NO, REC.JOBOP_ID, OPCLASS_CODE, CC_CODE, JOBOP_QTY, ESTOP_QTY
SELECT NVL(SUM(REC.REC_QTY),0) into RecQty
FROM rec, jobop
WHERE rec.jobop_id = jobop.jobop_id
AND OPCLASS_CODE LIKE 'Print%'
AND job_no = RecJob; --88280
**IF (OperationCode = 'Print' AND IssQty < (RecQty + :new.REC_QTY)) THEN
INSERT INTO RecAudit VALUES (:new.REC_ID, RecJob, :new.JOBOP_ID, IssQty, :new.REC_QTY, RecQty, (RecQty + :new.REC_QTY), OperationCode, CCCode);
RAISE_APPLICATION_ERROR(-20001, 'Issue Quantity Low');
END IF;**
END IF;
我的问题是我需要发回更多用户友好的错误。上面的代码给出了这个错误:
我尝试使用以下代码发送更多用户友好的反馈。
EXCEPTION
WHEN IssueLow
THEN
dbms_output.put_line(SQLCODE);
dbms_output.put_line(sqlerrm);
END;
这不会创建错误:QUERY消息框或在第三方应用程序中提供任何反馈。理想情况下,我想向应用程序发送这样的消息框。
是否可以创建自定义错误:查询消息框或至少抑制错误的其他部分?还有其他方法吗?我不是第三方应用程序的程序员。
截至2014年,下面的这个帖子基本上是以这种方式说出我想要的东西。这仍然是这样吗?