暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GaussDB数据库-错误处理:设置回调

CY 学数据库 2023-10-25
194

设置回调操作,当告警或者错误发生时,直接执行具体操作进行处理,设置回调命令如下:

EXEC SQL WHENEVER condition action;

condition取值范围:

  • SQLERROR:当在SQL语句执行期间发生错误时,调用指定操作。
  • SQLWARNING:当在SQL语句执行期间发生告警时,调用指定操作。
  • NOT FOUND:当SQL语句检索或者影响零行,则调用指定操作。

action取值范围:

  • CONTINUE:忽略回调错误条件,继续执行,通常可以用来停止break包含条件,为缺省值。
  • GOTO label/GO TO label:跳转到指定标签(使用C语言goto语句)。
  • SQLPRINT:输出消息到标准错误。
  • STOP:调用exit(1),终止程序。
  • DO BREAK:执行C语句break,只有在循环中或者switch语句中使用。
  • SQLCALL name (args) / DO name (args):调用具有指定参数的指定C语言函数。

示例如下:

/* 当出现一个告警时它打印一个消息,发生一个错误时中止程序。 */
EXEC SQL WHENEVER SQLWARNING SQLPRINT; 
EXEC SQL WHENEVER SQLERROR STOP;
  • 须知:
    • 语句EXEC SQL WHENEVER是SQL预处理器的一个指令,而非一个C语言语句。不管C语言程序的流程如何,该语句设置的错误或告警动作都适用于位于处理程序设置点之后的嵌入式SQL语句,除非第一个EXEC SQL WHENEVER语句和导致错误或告警情况发生的SQL语句之间为同一个情况设置了不同的动作。因此下面的两个C语言程序都不会得到预期的效果:
      /*  
       * 错误  
       */ 
      int main(int argc, char *argv[]) 
      {
          ...     
          if (verbose) { 
              EXEC SQL WHENEVER SQLWARNING SQLPRINT;
          }
          ...     
          EXEC SQL SELECT ...;    
          ... 
      }
      /* 
       * 错误 
       */ 
      int main(int argc, char *argv[]) 
      { 
          ... 
          set_error_handler(); 
          ... 
          EXEC SQL SELECT ...; 
          ... 
      }  
      static void set_error_handler(void) 
      { 
          EXEC SQL WHENEVER SQLERROR STOP; 
      }
    • 当使用DO BREAK时只能用于while/for/switch场景,且用完需要使用CONTINUE语句忽略。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论