如果里面有一个包含1000个DML语句的PLSQL块,我们想知道哪个DML语句抛出了错误,那么我们怎么能找到它?
答案 0 :(得分:0)
在INSERT
语句中使用LOG ERRORS INTO
clause告诉您哪些数据导致异常:
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
<强> Results 强>:
没有结果
查询2 :
SELECT ORA_ERR_MESG$, ORA_ERR_TAG$, value FROM errlog
<强> Results 强>:
| ORA_ERR_MESG$ | ORA_ERR_TAG$ | VALUE |
|----------------------------------------------------------------|--------------|-------|
| ORA-02290: check constraint (USER_4_4E3503.MOD5_CHK) violated | error | 5 |
答案 1 :(得分:-1)
使用SP进行记录(最好使用自治事务)。