在PLSQL块内部捕获错误
答
使用LOG ERRORS INTO
clause在INSERT
语句来告诉你哪些数据引起异常:
的Oracle 11g R2架构设置:
CREATE TABLE table_name (
value INTEGER
CONSTRAINT MOD5_CHK CHECK (MOD(value, 5) > 0)
)
/
BEGIN
DBMS_ERRLOG.CREATE_ERROR_LOG('table_name', 'errlog');
END;
/
DECLARE
check_violated EXCEPTION;
PRAGMA EXCEPTION_INIT(check_violated, -2290);
BEGIN
INSERT INTO table_name (value)
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 13
LOG ERRORS INTO errlog ('error') REJECT LIMIT 0;
EXCEPTION
WHEN check_violated THEN
NULL;
END;
/
查询1:
SELECT * FROM table_name
没有结果
查询2:
SELECT ORA_ERR_MESG$, ORA_ERR_TAG$, value FROM errlog
| ORA_ERR_MESG$ | ORA_ERR_TAG$ | VALUE |
|----------------------------------------------------------------|--------------|-------|
| ORA-02290: check constraint (USER_4_4E3503.MOD5_CHK) violated | error | 5 |
编写一个异常块并处理故障。 – XING
[DML和异常处理 - Oracle]的可能重复(https://stackoverflow.com/questions/33540754/dml-and-exception-handling-oracle) – XING
错误消息将指示失败的行。请添加一些关于您面临的情况的更多细节。 –