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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (A ~ D)

 

BEGIN 文

この文は 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;