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 の使用法 » ストアド・プロシージャとトリガ » プロシージャ、トリガ、バッチの使用 » ユーザ定義関数の概要

 

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

ユーザ定義関数は、集合関数以外の組み込み関数が使われていればどこでも使用できますが、適切なパーミッションが必要です。

次に示す例は、姓と名前の入った 2 つのカラムから氏名を表示します。

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

次の例は、文中に提供された姓と名前から氏名を表示します。

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

関数に対する EXECUTE パーミッションを付与されたユーザは FullName 関数を使用できます。

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

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';

カーソルと例外の宣言については後で説明します。

注意

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