您的位置:寻梦网首页编程乐园数据库PostgreSQL 7.2 Documentation

23.8. 错误和消息

利用 RAISE 语句报告信息以及抛出错误.

RAISE 

level

 '

format

' [
, 

variable

 [
...
]
];

可能的级别有 DEBUG (向 postmaster 日志写信息),NOTICE(把信息写到 postmaster 日志以及转发到客户端应用) 和 EXCEPTION(抛出一个错误, 退出事务).

在格式字串里, % 被下一个可选参数的外部表现形式代替. 要发出一个文本的 % ,你要写 %% . 请注意可选的参数必须是简单的变量,不能是表达式,而且格式必须是一个 简单的字串文本.

例子∶

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

在这个例子里,v_job_id 将被字串中的 % 代替.

RAISE EXCEPTION ''Inexistent ID --> %'',user_id;

这样会带着给出的错误信息退出事务.

23.8.1. 例外

PostgreSQL 现在还没有足够聪明的 例外处理模型.不管是分析器,规划器/优化器还是执行器认为 一条语句无法再处理下去了,那么整个事务都退出,然后系统跳回 主循环等待来自客户端应用的下一条查询.

我们可以'钩'在错误处理机制上来提示这种情况的发生. 但是目前我们没有能力告诉(用户)是什么导致了退出(输入/输出转换错误, 浮点数错误,分析错误).并且此时的数据库后端可能处在一种不连贯的状态, 所以退回到上层执行器或执行更多的命令可能摧毁整个数据库.

因此, PL/pgSQL 在函数或触发器操作时遇到退出的唯一一项操作是写一些 额外的 NOTICE 级别的日志信息, 报告在哪个函数和在那里(行号和语句类型)出了错. 这些错误总是中止该函数的执行.