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. 使用用户定义的函数执行 SELECT 语句。

结果

函数已成功调用并执行。

  • 示例 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 中执行以下语句,以从包含名字和姓氏的两列返回全名:

    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 中使用时,其执行效果很差。例如,如果在某张表的查询的 SELECT 列表中使用该函数,该表包含 100000 行,其中 10000 行将被返回,则该函数将被调用 10000 次。如果在同一查询的 WHERE 子句中使用该函数,则该函数会被调用 100000 次。

    Customers 表包括加拿大和美国客户。用户定义的函数 Nationality 根据 Country 列生成一个由三个字母组成的国家/地区代码。



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


 另请参见