【发布时间】:2015-05-26 19:46:52
【问题描述】:
我正在制作一个 PL/SQL 错误处理模板。我收到此错误:'PLS-00103:遇到符号“例外”',我不知道出了什么问题。我们使用的是 Oracle 数据库。
DECLARE
err_num VARCHAR(100); -- We're not gonna do math on this so I made it a string.
err_msg VARCHAR2(100);
program VARCHAR2(100);
statement VARCHAR2(100);
BEGIN
program := 'assign the program here';
statment := 'assign the statement here';
END;
EXCEPTION
WHEN ACCESS_INTO_NULL
THEN
err_num := SQLCODE;
err_msg := SQLERRM(SQLCODE);
comment := "assign a comment here";
INSERT INTO ERRORS VALUES (err_num, err_msg, program, statement, comment, CURRENT_TIMESTAMP);
WHEN CASE_NOT_FOUND
THEN
err_num := SQLCODE;
err_msg := SQLERRM(SQLCODE);
comment := "assign a comment here";
INSERT INTO ERRORS VALUES (err_num, err_msg, program, statement, comment, CURRENT_TIMESTAMP);
...
WHEN OTHERS
THEN
err_num := -9999;
err_msg := 'undefined error occurred';
comment := "assign a comment here";
INSERT INTO ERRORS VALUES (err_num, err_msg, program, statement, comment, CURRENT_TIMESTAMP);
END;
ERRORS 表是:
CREATE TABLE ERRORS
(
ERR_NUM VARCHAR2(100 BYTE) NOT NULL
, ERR_MSG VARCHAR2(100 BYTE) NOT NULL
, PROGRAM VARCHAR2(100 BYTE)
, STATEMENT VARCHAR2(100 BYTE)
, USER_COMMENT VARCHAR2(100 BYTE)
, TIMESTAMP DATE NOT NULL
)
LOGGING
TABLESPACE DATAL03
PCTFREE 10
INITRANS 1
STORAGE
(
INITIAL 65536
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
NOCOMPRESS
NOPARALLEL;
【问题讨论】:
-
您希望
EXCEPTION关键字映射到什么?它不是它上面的 PL/SQL 块的一部分。它是否嵌入在此处未提及的外部 PL/SQL 块中?您的例外在哪里定义?access_into_null和case_not_found不是内置异常。也许您已经在同一个外部块中定义了它们?为什么不在others块中使用sqlcode和/或sqlerrm函数? -
我是新手 - 感谢您的意见。如何使
EXCEPTION关键字映射到该块?我以为有。我希望它处理上面的BEGIN和DECLARE中引发的异常。我会用你所说的关于其他块的东西来修改它。 dba-oracle 说access_into_null和case_not_found是内置的,是不是错了? -
如果我没记错的话,是
DECLARE ... BEGIN ... EXCEPTION ... END; -
对。删除第一个
END;就完成了。
标签: oracle plsql database-administration error-handling