此语句用于将 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 结束。
无。
无。
SQL/92 持久存储模块特性。
SQL/99 持久存储模块特性。
Sybase 受 Adaptive Server Enterprise 支持。这并不意味着支持复合语句中的所有语句。
在 Transact-SQL 中不要求 BEGIN 和 END 关键字。
在 Transact-SQL 中,BEGIN 和 END 用于将一组语句组合成一个复合语句,以便控制语句(如 IF ... ELSE,它只影响单个 SQL 语句的执行)可以影响整个组的执行。Adaptive Server Enterprise 不支持 ATOMIC 关键字。
在 Transact-SQL 中,DECLARE 语句不必紧跟在 BEGIN 关键字后,并且声明的游标或变量在复合语句的持续时间内存在。为了兼容,应该在复合语句的开头声明变量。
过程或触发器的主体是复合语句。
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;
ENDSQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。