我目前正在尝试使用 PL/pgSQL 并想知道是否有更优雅的方式来做这样的事情:
select c.data into data from doc c where c.doc_id = id and c.group_cur > group_cur order by c.id desc limit 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
select c.data into data from doc c where c.doc_id = id and c.global_cur > global_cur order by c.id desc limit 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
异常块用于捕获错误,而不是检查条件。换句话说,如果某些条件可以在编译时处理,则不应将其捕获为错误,而应由普通程序逻辑解决。
在PL/PgSQL 文档的 Trapping Errors 部分中,您可以找到这样的提示:
而不是使用异常(坏)或 IF/THEN/ELSIF(更好),您可以将其重写为一个查询:
如果你真的想要两个查询,你可以使用特殊的 FOUND 变量来测试之前的查询是否给出了任何结果:
强制性 RTFM 链接如下:-)
有关变量的描述,请参见this ,对于/块,请参见this 。
FOUND
IF
THEN
您可以检查布尔类型的特殊变量 FOUND。从文档中: