转载

PostgreSQL Errors and Messages

使用 RAISE语句来报告消息并抛出错误

RAISE [ level ] ’format’ [, expression [, ... ]] [ USING option = expression [, ... ] ];
RAISE [ level ] condition_name [ USING option = expression [, ... ] ];
RAISE [ level ] SQLSTATE ’sqlstate’ [ USING option = expression [, ... ] ];
RAISE [ level ] USING option = expression [, ... ];
RAISE ;

level选项指定错误的严重程度。允许的级别有 DEBUG, LOG, INFO, NOTICE,WARNING, 和 EXCEPTION,  默认的是 EXCEPTION 。 EXCEPTION 抛出一个错误 (通常终止当前错误 );其他 level只能生成不同优先级的消息。是否要把一个特定的优先级的消息报告给客户,写入服务器日志,是由 log_min_messages和 client_min_messages配置变量控制。

任何 level你都可以写一个格式(必须是一个简单的字符串文字,而不是一个简单的表达式)。格式字符串指定要报告的错误消息文本。该格式字符串可以跟可选的要被插入到消息中的参数表达式。在格式字符串中, %被替换为下一个可选参数的字符串表示形式 ,写两个 %%发出一个 %。

在这个例子中, v_job_id的值将替换字符串中的 %:

RAISE NOTICE ’Calling cs_create_job(%)’, v_job_id;

通过写 USING后跟着 option =expression可以添加额外的信息到错误报告中,每个表达式都可以是任意字符串值的表达式。允许的 option关键字如下:

MESSAGE:设置错误信息文本。此选项不能用于在 USING之前包含一个格式串的 RAISE格式。

DETAIL:提供一个错误的详细信息。

HINT:提供一个提示信息。

ERRCODE:指定要报告的错误码( SQLSTATE),通过条件名,或者直接是一五个字符的 SQLSTATE代码。

COLUMN
CONSTRAINT
DATATYPE
TABLE
SCHEMA

提供相关对象的名称。

下面这个例子将中止带有给定的错误消息和提示的事务:

RAISE EXCEPTION ’Nonexistent ID --> %’, user_id
USING HINT = ’Please check your user ID’;

下面两个例子显示设置 SQLSTATE等效方法:

RAISE ’Duplicate user ID: %’, user_id USING ERRCODE = ’unique_violation’;
RAISE ’Duplicate user ID: %’, user_id USING ERRCODE = ’23505’;

还有一个 RAISE语法,主要参数是条件名或者要报告的 SQLSTATE ,例如:

RAISE division_by_zero;
RAISE SQLSTATE ’22012’;

在这个语法中, USING可用于提供自定义错误信息 ,细节或者提示。实现前面例子的另外一种方法是:

RAISE unique_violation USING MESSAGE = ’Duplicate user ID: ’ || user_id;

还有一个变体是写 RAISE USING或者 RAISE level USING,把所有的一切都放在 USING列表中。

RAISE的最后一个变体是没有任何参数。此表单只用于 BEGIN块的 EXCEPTION子句中。它会导致当前正在处理的错误被重新抛出。

如果 RAISE EXCEPTION命令中既不指定条件名也不指定 SQLSTATE,默认使用 RAISE_EXCEPTION (P0001)。如果不指定消息文本,默认使用条件名或者 SQLSTATE作为消息文本。

正文到此结束
Loading...