この文は SQL 文を 1 つにまとめるために使用します。
[ 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 句 ATOMIC 文は、完全に実行されるか、あるいはまったく実行されない文です。たとえば、何千ものローを更新する UPDATE 文では、たくさんのローを更新した後にエラーが発生することがあります。文が完了しないと、すべての変更内容が元の状態に戻ります。同様に、BEGIN 文を ATOMIC と指定すると、この文は完全に実行されるか、あるいはまったく実行されないかのどちらかです。
プロシージャまたはトリガの本文は複合文です。複合文は、プロシージャまたはトリガ内の制御文の中でも使用できます。
複合文によって、1 つまたは複数の SQL 文をまとめて、1 つの単位として扱うことができます。複合文はキーワード 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 |