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

 

結果をプロシージャのパラメータとして返す

プロシージャは、プロシージャのパラメータで呼び出しを行った環境に結果を返すことができます。

次の文を使用して、プロシージャ内でパラメータと変数に値を割り当てることができます。

  • SET 文

  • INTO 句を持つ SELECT 文

SET 文の使用

次に示すプロシージャは、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;
シングルロー SELECT 文の使用

シングルロー・クエリは 1 つのローをデータベースから取り出します。このタイプのクエリは SELECT 文に INTO 句を組み合わせて作成します。INTO 句は select リストの後に続き、FROM 句より前に指定します。select リストの各項目の値を受け取るための変数のリストが含まれます。変数は、select リストの項目数と同じ数だけ用意します。

SELECT 文が実行されると、サーバは SELECT 文の結果を取り出して、変数に入れます。クエリの結果が複数のローを含んでいれば、サーバはエラーを返します。複数のローを返すクエリにはカーソルを使用します。プロシージャから複数のローを返す方法については、プロシージャから結果セットを返すを参照してください。

クエリの結果、選択されたローが存在しない場合は、警告が返ります。

次にシングルローの SELECT 文の結果をパラメータに返すプロシージャの例を示します。

♦  指定した顧客によって行われた発注の数を返すには、次の手順に従います。

このプロシージャは、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 に入れます。