プロシージャは、プロシージャのパラメータで呼び出しを行った環境に結果を返すことができます。
次の文を使用して、プロシージャ内でパラメータと変数に値を割り当てることができます。
SET 文
INTO 句を持つ SELECT 文
次に示すプロシージャは、SET 文を使用して OUT パラメータに値を割り当てて返します。
CREATE PROCEDURE greater( IN a INT, IN b INT, OUT c INT ) BEGIN IF a > b THEN SET c = a; ELSE SET c = b; END IF ; END; |
シングルロー・クエリは 1 つのローをデータベースから取り出します。このタイプのクエリは SELECT 文に INTO 句を組み合わせて作成します。INTO 句は select リストの後に続き、FROM 句より前に指定します。select リストの各項目の値を受け取るための変数のリストが含まれます。変数は、select リストの項目数と同じ数だけ用意します。
SELECT 文が実行されると、サーバは SELECT 文の結果を取り出して、変数に入れます。クエリの結果が複数のローを含んでいれば、サーバはエラーを返します。複数のローを返すクエリにはカーソルを使用します。プロシージャから複数のローを返す方法については、プロシージャから結果セットを返すを参照してください。
クエリの結果、選択されたローが存在しない場合は、警告が返ります。
次にシングルローの SELECT 文の結果をパラメータに返すプロシージャの例を示します。
次のように入力します。
CREATE PROCEDURE OrderCount( IN customer_ID INT, OUT Orders INT ) BEGIN SELECT COUNT(SalesOrders.ID) INTO Orders FROM Customers KEY LEFT OUTER JOIN SalesOrders WHERE Customers.ID = customer_ID; END; |
このプロシージャは、Interactive SQL で次の文を使ってテストできます。次の文は ID が 102 の顧客からの注文の回数を返します。
CREATE VARIABLE orders INT; CALL OrderCount ( 102, orders ); SELECT orders; |
customer_ID パラメータは IN パラメータとして宣言されます。このパラメータは顧客の ID をプロシージャに渡します。
Orders パラメータは OUT パラメータとして宣言されます。これは変数 orders の値を呼び出し元の環境に返します。
変数 Orders はプロシージャの引数リストで宣言されているので、DECLARE 文は必要ありません。
SELECT 文は 1 つのローを返して、変数 Orders に入れます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |