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

SAP Sybase SQL Anywhere 16.0 » SQL Anywhere サーバ SQL の使用法 » ストアドプロシージャ、トリガ、バッチ、ユーザ定義関数 » ユーザ定義関数

 

ユーザ定義関数の呼び出し

ユーザ定義関数は、集合関数以外の組み込み関数が使われていればどこでも使用できます。

前提条件

その関数に対する EXECUTE 権限が必要です。

 ♦ タスク
  1. Interactive SQL で、データベースに接続します。

  2. ユーザ定義関数を使用して、EXECUTE 文を実行します。

結果

関数が呼び出され、実行されます。

  • 例 1:ユーザ定義関数の呼び出し   次の関数は、firstname 文字列と lastname 文字列を連結します。
    CREATE FUNCTION fullname(
       firstname CHAR(30),
       lastname CHAR(30) )
    RETURNS CHAR(61)
    BEGIN
       DECLARE name CHAR(61);
       SET name = firstname || ' ' || lastname;
       RETURN (name);
    END;

    Interactive SQL で次の文を実行すると、姓と名前の入った 2 つのカラムから氏名が返されます。

    SELECT FullName( GivenName, Surname ) 
     AS "Full Name"
     FROM Employees;
    Full Name
    Fran Whitney
    Matthew Cobb
    Philip Chin
    ...

    Interactive SQL で次の文を実行すると、FullName ユーザ定義関数が使用され、指定された姓と名前から氏名が返されます。

    SELECT FullName('Jane', 'Smith') 
     AS "Full Name";
    Full Name
    Jane Smith

  • 例 2:ローカル変数の宣言   次にローカル変数の宣言の例としてユーザ定義関数を示します。

    注意

    この関数は説明には役立ちますが、多数のローを含む SELECT に使用する場合は、性能が低くなることがあります。たとえば、テーブルに 100000 のローがあり、その中の 10000 のローを返すようなクエリの SELECT リストで関数を使用した場合、関数は 10000 回呼び出されます。同じクエリの WHERE 句に関数を使用した場合は、100000 回呼び出されます。

    Customers テーブルには、カナダとアメリカの顧客が含まれます。ユーザ定義関数 Nationality は、Country カラムの入力データに基づいて 3 文字の国コードを生成します。



    CREATE FUNCTION Nationality( CustomerID INT )
    RETURNS CHAR( 3 )
    BEGIN
        DECLARE nation_string CHAR(3);
        DECLARE nation country_t;
        SELECT DISTINCT Country INTO nation 
        FROM Customers 
        WHERE ID = CustomerID;
        IF nation = 'Canada' THEN
                SET nation_string = 'CDN';
        ELSE IF nation = 'USA' OR nation = ' ' THEN
                SET nation_string = 'USA';
            ELSE
                SET nation_string = 'OTH';
            END IF;
        END IF;
    RETURN ( nation_string );
    END;

    この例では国名を入れる変数 nation_string を宣言し、SET 文を使用して値を nation_string に入れます。次に nation_string の値を、この関数を呼び出した環境に返します。

    次に示すクエリは、Customers テーブルに含まれるカナダの顧客をすべてリストします。

    SELECT *
    FROM Customers
    WHERE Nationality( ID ) = 'CDN';


 参照