# 43.9.错误和消息
# 43.9.1.报告错误和消息
使用提升
语句来报告消息并引发错误。
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 ;
这个*数量
*选项指定错误的严重性。允许的水平是调试
,日志
,信息
,注意
,警告
和例外
具有例外
作为默认值。例外
引发错误(通常会中止当前事务);其他级别只生成不同优先级的消息。特定优先级的消息是报告给客户端、写入服务器日志,还是两者都由日志_最小值✓哦♫消息和客户✓哦♫最小值✓哦♫消息可变配置。参见第20章更多信息。
之后*级别
如果有的话,你可以写一个格式
*(必须是简单的字符串文本,而不是表达式)。格式字符串指定要报告的错误消息文本。格式字符串后面可以是插入消息中的可选参数表达式。在格式字符串中,百分比%
替换为下一个可选参数值的字符串表示形式。写百分比%
发出文字百分比%
。参数的数目必须与百分比%
格式字符串中的占位符,或者在编译函数时引发错误。
在本例中,V作业ID
将替换%
在字符串中:
RAISE NOTICE 'Calling cs_create_job(%)', v_job_id;
您可以通过书写将附加信息附加到错误报告中使用
然后*选项
* = *表示
项目。每个表示
可以是任何字符串值表达式。允许的选项
*关键词是:
消息
设置错误消息文本。此选项不能以提升
之前包含一个格式字符串使用
.
细节
提供错误详细信息。
暗示
提供提示信息。
错误代码
按条件名称指定要报告的错误代码(SQLSTATE),如中所示附录A,或直接作为五个字符的SQLSTATE代码。
柱
限制
数据类型
桌子
模式
提供相关对象的名称。
此示例将使用给定的错误消息和提示中止事务:
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';
还有第二个提升
主参数是要报告的条件名称或SQLSTATE的语法,例如:
RAISE division_by_zero;
RAISE SQLSTATE '22012';
在这种语法中,使用
可用于提供自定义错误消息、详细信息或提示。执行前面示例的另一种方法是
RAISE unique_violation USING MESSAGE = 'Duplicate user ID: ' || user_id;
还有一种变体是写作利用
或提高*
数量*使用
把其他的都放进使用
列表
最后一个变种提升
完全没有参数。此表格只能在开始
布洛克例外
条款它会导致重新抛出当前正在处理的错误。
# 笔记
在PostgreSQL 9.1之前,提升
没有参数被解释为从包含活动异常处理程序的块中重新抛出错误。因此例外
嵌套在该处理程序中的子句无法捕获它,即使提升
在嵌套的例外
我们的街区。这被认为是令人惊讶的,而且与Oracle的PL/SQL不兼容。
如果在引发异常
命令,默认为使用ERRCODE_RAISE_异常
(P0001
)。如果未指定消息文本,则默认情况下使用条件名称或SQLSTATE作为消息文本。
# 笔记
当通过SQLSTATE代码指定错误代码时,您不仅限于预定义的错误代码,还可以选择由五位数字和/或大写ASCII字母组成的任何错误代码,而不是00000
。建议您避免抛出以三个零结尾的错误代码,因为这些是类别代码,只能通过捕获整个类别来捕获。
# 43.9.2.检查断言
这个明确肯定
语句是在PL/pgSQL函数中插入调试检查的一种方便快捷的方法。
ASSERT condition [ , message ];
这个*条件
是一个布尔表达式,其计算结果应始终为true;如果是这样的话明确肯定
声明没有进一步的作用。如果结果为false或null,则断言失败
提出了例外情况。(如果评估过程中出现错误条件
*,报告为正常错误。)
如果可选*消息
如果条件
失败这个消息
*在断言成功的正常情况下,不计算表达式。
可以通过配置参数启用或禁用断言测试plpgsql。查核财产
,它接受一个布尔值;默认值是在…上
.如果此参数为关
然后明确肯定
声明没有任何作用。
注意明确肯定
用于检测程序错误,而不是报告普通错误情况。使用提升
声明,如上所述。