Collection Contents 上一页 下一页 PDF

ASA SQL 参考

SQL 语句

BEGIN 语句


说明 

此语句用于将 SQL 语句组合在一起。

语法 

statement-label : ]
BEGIN [ [ NOT ] ATOMIC ]
   [ local-declaration; ... ]
   statement-list
   [ EXCEPTION [ exception-case ... ] ]
END [ statement-label ]

local-declaration :
 variable-declaration
cursor-declaration
exception-declaration
temporary-table-declaration

variable-declaration :
DECLARE variable-name data-type

exception-declaration :
DECLARE exception-name EXCEPTION
FOR SQLSTATE [ VALUE ] string

exception-case :
 WHEN exception-name [, ... ] THEN statement-list
WHEN OTHERS THEN statement-list

参数 

local-declaration    紧接在 BEGIN 后,复合语句可以有仅存在于复合语句中的对象的本地声明。复合语句可以有变量、游标、临时表或例外的本地声明。局部声明可由该复合语句中的任何语句引用,或者可由该复合语句内嵌套的任何复合语句中的任何语句引用。本地声明对于从复合语句中调用的其它过程不可见。

statement-label    如果指定结尾 statement-label,它必须与起始 statement-label 匹配。LEAVE 语句可用于在复合语句后的第一个语句处继续执行。复合语句是过程或触发器的主体,它具有与过程或触发器同名的隐式标签。

有关复合语句和例外处理的完整说明,请参见使用过程、触发器和批处理

ATOMIC    原子语句是完全执行或根本不执行的语句。例如,更新数千行的 UPDATE 语句在更新许多行后可能会遇到错误。如果该语句没有完成,则所有更改都恢复为其原始状态。类似地,如果指定 BEGIN 语句为原子语句,则该语句要么完全执行,要么根本不执行。

用法 

过程或触发器的主体是复合语句。过程或触发器内的控制语句也可以使用复合语句。

复合语句允许一个或多个 SQL 语句组合在一起,按一个单元处理。复合语句以关键字 BEGIN 开始,以关键字 END 结束。

权限 

无。

副作用 

无。

另请参见 
标准和兼容性 
示例 

过程或触发器的主体是复合语句。

CREATE PROCEDURE TopCustomer (OUT TopCompany CHAR(35), OUT TopValue INT)
BEGIN
   DECLARE err_notfound EXCEPTION FOR
      SQLSTATE '02000';
   DECLARE curThisCust CURSOR FOR
      SELECT company_name, CAST(
            sum(sales_order_items.quantity *
            product.unit_price) AS INTEGER) VALUE
      FROM customer
            LEFT OUTER JOIN sales_order
            LEFT OUTER JOIN sales_order_items
            LEFT OUTER JOIN product
      GROUP BY company_name;
   DECLARE ThisValue INT;
   DECLARE ThisCompany CHAR(35);
   SET TopValue = 0;
   OPEN curThisCust;
   CustomerLoop:
   LOOP
      FETCH NEXT curThisCust
         INTO ThisCompany, ThisValue;
      IF SQLSTATE = err_notfound THEN
         LEAVE CustomerLoop;
      END IF;
      IF ThisValue > TopValue THEN
         SET TopValue = ThisValue;
         SET TopCompany = ThisCompany;
      END IF;
   END LOOP CustomerLoop;
   CLOSE curThisCust;
END

Collection Contents 上一页 下一页 PDF