此语句用于将 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/2003 持久存储模块特性。
过程或触发器的主体是复合语句。
CREATE PROCEDURE TopCustomer (OUT TopCompany CHAR(35), OUT TopValue INT) BEGIN DECLARE err_notfound EXCEPTION FOR SQLSTATE '02000'; DECLARE curThisCust CURSOR FOR SELECT CompanyName, CAST( sum( SalesOrderItems.Quantity * Products.UnitPrice ) AS INTEGER) VALUE FROM Customers LEFT OUTER JOIN SalesOrders LEFT OUTER JOIN SalesOrderItems LEFT OUTER JOIN Products GROUP BY CompanyName; 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; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |