Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - SQL 的用法 » 存储过程、触发器、批处理和用户定义的函数 » 错误和警告处理

 

缺省的警告处理

错误和警告的处理方式各不相同。对错误的缺省操作是为 SQLSTATE 和 SQLCODE 变量设置值,并在遇到错误时将控制权返回给调用环境;而对警告的缺省操作是设置 SQLSTATE 和 SQLCODE 值,并继续执行过程。

以下演示过程说明缺省情况下警告的处理方式。

在本例中,SIGNAL 语句生成一个指明找不到行的条件。这是警告,不是错误。



DROP PROCEDURE OuterProc;
DROP PROCEDURE InnerProc;

CREATE PROCEDURE OuterProc()
BEGIN
   MESSAGE 'Hello from OuterProc.' TO CLIENT;
   CALL InnerProc();
   MESSAGE 'SQLSTATE set to ',
      SQLSTATE,' in OuterProc.' TO CLIENT;
END;
CREATE PROCEDURE InnerProc()
BEGIN
   DECLARE row_not_found
      EXCEPTION FOR SQLSTATE '02000';
   MESSAGE 'Hello from InnerProc.' TO CLIENT;
   SIGNAL row_not_found;
   MESSAGE 'SQLSTATE set to ',
   SQLSTATE, ' in InnerProc.' TO CLIENT;
END;

CALL OuterProc();

Interactive SQL [消息] 选项卡随后会显示以下内容:

Hello from OuterProc.
Hello from InnerProc.
SQLSTATE set to 02000 in InnerProc.
SQLSTATE set to 00000 in OuterProc.

通过由警告 (02000) 设置的 SQLSTATE,这两个过程都在生成警告后继续执行。

执行 InnerProc 中的第二个 MESSAGE 语句时会重置该警告。任何 SQL 语句的成功执行都会将 SQLSTATE 重置为 00000,将 SQLCODE 重置为 0。如果某一过程需要保存错误状态,它必须在引发错误或警告的语句执行后立即指派状态值。

 另请参见