在您要使用内置的非集合函数的任何地方,都可以根据权限使用用户定义的函数。
以下语句在 Interactive SQL 中从包含名字和姓氏的两列返回全名:
SELECT FullName(GivenName, Surname) AS "Full Name" FROM Employees; |
Full Name |
---|
Fran Whitney |
Matthew Cobb |
Philip Chin |
... |
以下语句在 Interactive SQL 中从提供的名字和姓氏返回全名:
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 字符串的值返回给调用环境。
以下查询列出 Customers 表中的所有加拿大客户:
SELECT * FROM Customers WHERE Nationality(ID) = 'CDN'; |
游标和异常的声明将在后面几节中讨论。
尽管此函数适合于概念阐述,但在涉及多行的 SELECT 中使用时,其执行效果会非常差。例如,如果在某张表的查询的 SELECT 列表中使用该函数,该表包含 100,000 行,其中 10,000 行将被返回,则该函数将被调用 10,000 次。如果在同一查询的 WHERE 子句中使用该函数,则该函数会被调用 100,000 次。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |