結果セットを使用して、プロシージャは複数のローの結果を呼び出し元の環境に返すことができます。
次に示すプロシージャは、注文した顧客のリストと、注文の合計額を返します。注文のなかった顧客はリストに含まれません。
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 での結果セットの編集を参照してください。
ストアド・プロシージャまたはユーザ定義関数が結果セットを返す場合、出力パラメータを設定したり戻り値を返したりすることはできません。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |