更新时间: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语句忽略回调错误条件。

相关文档