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 の使用法 » ストアド・プロシージャとトリガ » プロシージャ、トリガ、バッチの使用 » プロシージャから返される結果

 

プロシージャから結果セットを返す

結果セットを使用して、プロシージャは複数のローの結果を呼び出し元の環境に返すことができます。

次に示すプロシージャは、注文した顧客のリストと、注文の合計額を返します。注文のなかった顧客はリストに含まれません。

CREATE PROCEDURE ListCustomerValue()
RESULT ("Company" CHAR(36), "Value" INT)
BEGIN
   SELECT CompanyName,
      CAST( sum(  SalesOrderItems.Quantity *
                  Products.UnitPrice)
                  AS INTEGER ) AS value
   FROM Customers
      INNER JOIN SalesOrders
      INNER JOIN SalesOrderItems
      INNER JOIN Products
   GROUP BY CompanyName
   ORDER BY value DESC;
END;
  • 次のように入力します。

    CALL ListCustomerValue ( );
Company Value
The Hat Company 5016
The Igloo 3564
The Ultimate 3348
North Land Trading 3144
Molly's 2808
... ...
注意
  • RESULT 句のリスト内の変数の数は、SELECT 文のリスト内の変数の数に一致しなければなりません。データ型が一致しない場合は、可能であれば自動的にデータ型の変換が行われます。

  • RESULT 句は CREATE PROCEDURE 文の一部で、コマンド・デリミタは付きません。

  • SELECT 文のリスト内の変数の名前は、RESULT 句のリスト内の変数の名前と一致する必要はありません。

  • このプロシージャをテストするとき、デフォルトでは Interactive SQL は最初の結果セットのみを返します。[オプション] ウィンドウの [結果] タブの [複数の結果セットを表示] オプションを設定して、複数の結果セットを表示するように Interactive SQL を設定できます。

  • ビューから作成されていない場合、プロシージャ結果セットを変更できます。プロシージャの結果を修正する場合、プロシージャを呼び出すユーザは基本のテーブルに対して適切なパーミッションを持っている必要があります。この点が、通常のプロシージャの実行のパーミッションとは異なります。通常は、プロシージャの所有者がテーブルに対するパーミッションを持っていなければなりません。Interactive SQL での結果セットの編集を参照してください。

  • ストアド・プロシージャまたはユーザ定義関数が結果セットを返す場合、出力パラメータを設定したり戻り値を返したりすることはできません。