代码搬运也需要发挥想象力,让不可能变为可能,这里讲一个例子。
1、 有人问PostgreSQL有没有自定义例外,Oracle是有的:
--定义
myex Exception;
--抛出
RAISE myex;
--捕获
WHEN myex THEN
简单易用
2、再来看PostgreSQL的PL/pgSQL
RAISE [ level ] condition_name [ USING option = expression [, ... ] ];
RAISE [ level ] SQLSTATE 'sqlstate' [ USING option = expression [, ... ] ];
这两种语法似乎有一定的灵活性,实际上它们只能使用预定义的例外,文档中有说明,如果不能识别会报错。
ERROR: unrecognized exception condition "xxxxxxx"
CONTEXT: compilation of PL/pgSQL function "func_a" near line 3
ERROR: invalid SQLSTATE code at or near "'12345'"
LINE 5: RAISE SQLSTATE '12345' USING MESSAGE = 'zzz';
3、代码实现
这段是强行加戏,防止篇幅过小的一个例外处理,完全可以跳过而不会有任何影响。
for (i = 0; exception_label_map[i].label !=