更新时间:2026-07-28 GMT+08:00
设置回调
当告警或者错误发生时,直接执行具体操作进行处理,设置回调命令如下:
EXEC SQL WHENEVER condition action;
condition取值范围:
- SQLERROR:当在SQL语句执行期间发生错误时,调用指定操作。
- SQLWARNING:当在SQL语句执行期间发生告警时,调用指定操作。
- NOT FOUND:当SQL语句检索或者影响为零行时,调用指定操作。
action取值范围:
- CONTINUE:忽略回调错误条件,继续执行,通常可以用来停止break包含条件,为缺省值。
- GOTO label/GO TO label:跳转到指定label(使用C语言goto语句)。
- SQLPRINT:输出消息到标准错误。
- STOP:调用exit(1),终止程序。
- DO BREAK:执行C语句break,只能在循环或者switch语句中使用。
示例如下:
/* 当出现一个告警时打印一个消息 */ EXEC SQL WHENEVER SQLWARNING SQLPRINT; /* 发生一个错误时中止程序。 */ EXEC SQL WHENEVER SQLERROR STOP;
- EXEC SQL WHENEVER 是 SQL 预处理器指令,而非C语言语句。它用于设置错误或警告的处理动作,该设置对后续所有嵌入式SQL语句生效,除非在第一个EXEC SQL WHENEVER语句与触发错误或警告的SQL语句之间,针对同一情况设置了不同的处理动作。因此下面的两个C语言程序都不会得到预期的效果:
/* 错误 */ void func() { ... if (verbose) { EXEC SQL WHENEVER SQLWARNING SQLPRINT; } ... EXEC SQL SELECT ...; ... }/* 错误 */ void func() { ... set_error_handler(); ... EXEC SQL SELECT ...; ... } static void set_error_handler(void) { EXEC SQL WHENEVER SQLERROR STOP; } - DO BREAK只能用于while/for/switch场景,且执行结束时需要使用CONTINUE语句忽略回调错误条件。
父主题: 错误处理