ユーザ定義関数は、集合関数以外の組み込み関数が使われていればどこでも使用できます。
前提条件
その関数に対する EXECUTE 権限が必要です。
Interactive SQL で、データベースに接続します。
ユーザ定義関数を使用して、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'; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |