SQL 过程中的 SQLCODE 和 SQLSTATE 变量

可以使用 SQLCODE 和 SQLSTATE 变量来显示 SQL 过程执行期间可能出现的错误消息和代码。

您可能会发现,测试 SQLCODE 或 SQLSTATE 的值对于执行错误处理或帮助您调试 SQL 过程很有用。可以将这些值作为输出参数或作为诊断消息字符串的一部分返回,也可以将这些值插入到表中以提供基本跟踪支持。

要在 SQL 过程中使用 SQLCODE 和 SQLSTATE 值,必须在 SQL 过程体中声明以下 SQL 变量:

   DECLARE SQLCODE INTEGER DEFAULT 0;
   DECLARE SQLSTATE CHAR(5) DEFAULT '00000';

每当执行语句时,Db2® 会隐式设置这些变量。如果语句出现存在对应处理程序的条件,那么会在处理程序执行开始时提供 SQLSTATE 和 SQLCODE 变量的值。但是,执行处理程序中的第一个语句后这些变量会重置。因此,通常会将 SQLSTATE 和 SQLCODE 的值复制到处理程序第一个语句的局部变量中。在以下示例中,对应任意条件的 CONTINUE 处理程序用于将 SQLCODE 变量复制到另一变量 retcode 中。然后可在可执行语句中使用变量 retcode 来控制过程逻辑或将该值作为输出参数返回。

BEGIN 
  DECLARE SQLCODE INTEGER DEFAULT 0;
  DECLARE retcode INTEGER DEFAULT 0;
  
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
     SET retcode = SQLCODE;

  executable-statements
END
注: 在 SQL 过程中访问 SQLCODE 或 SQLSTATE 变量时,Db2 会将 SQLCODE 的值设置为 0,并将 SQLSTATE 设置为“00000”(对于后续语句)。