开发者社区 > PolarDB开源 > PolarDB PostgreSQL 版 > 正文

在PolarDB-O中,函数可以返回哪些类型?

在PolarDB-O中,函数可以返回哪些类型?请举例说明并写一些具体函数创建示例

展开
收起
旦丁堡 2024-05-10 15:08:58 55 0
2 条回答
写回答
取消 提交回答
  • 某政企事业单位安全运维工程师,主要从事系统运维及网络安全工作,多次获得阿里云、华为云、腾讯云征文比赛一二等奖;CTF选手,白帽,全国交通行业网络安全大赛二等奖,全国数信杯数据安全大赛银奖,手握多张EDU、CNVD、CNNVD证书。

    在PolarDB-O中,函数可以返回多种类型的数据,包括但不限于标量类型(如integer, text, boolean等)、复合类型(如record, row类型)、数组类型以及特殊类型如JSON和JSONB。这里有一些具体示例:

    示例1:返回JSON类型

    CREATE FUNCTION plv8_test(keys TEXT[], vals TEXT[]) 
    RETURNS JSON AS $$
    var o = {};
    for(var i=0; i<keys.length; i++){
      o[keys[i]] = vals[i];
    }
    return o;
    $$ LANGUAGE plv8 IMMUTABLE STRICT;
    
    SELECT plv8_test(ARRAY['name', 'age'], ARRAY['Tom', '29']);
    

    此例中,函数plv8_test接收两个文本数组作为输入,返回一个JSON对象。

    示例2:返回集合(SETOF)

    CREATE OR REPLACE FUNCTION unnest2(anyarray) 
    RETURNS SETOF anyelement AS $$
    SELECT $1[i][j] 
    FROM generate_subscripts($1,1) g1(i), generate_subscripts($1,2) g2(j);
    $$ LANGUAGE sql IMMUTABLE;
    
    SELECT * FROM unnest2(ARRAY[[1,2],[3,4]]);
    

    此函数unnest2接受二维数组,返回由数组元素构成的集合。

    注意事项:

    使用CREATE FUNCTION时,确保函数名称在相同schema内不与其它同名函数的输入参数类型冲突(除非有意进行函数重载)。

    若要修改函数定义,需使用CREATE OR REPLACE FUNCTION,但注意这不支持更改函数名、参数类型或返回类型,后者需先删除再重建。

    PLV8允许在PostgreSQL内部使用JavaScript编写函数,增加了灵活性。

    PLV8_云原生数据库PolarDB PostgreSQL版

    CREATE FUNCTION 说明

    PolarDBPostgreSQL有哪些集合返回函数

    使用CREATEFUNCTION命令创建函数

    CREATE FUNCTION ... AGGREGATE USING type_name 简介

    2024-05-10 21:24:18
    赞同 1 展开评论 打赏
  • PolarDB-O 支持的函数类型包括但不限于数学函数、字符串函数、转换函数等。以下是一些示例说明及具体函数创建示例:

    数学函数

    数学函数通常处理数值运算,返回整数、浮点数等数学计算结果。

    示例: 使用 ATAN2 函数计算反正切值。

    CREATE FUNCTION CalculateATan2(x FLOAT, y FLOAT)
    RETURNS FLOAT
    AS $$
    BEGIN
      RETURN ATAN2(x, y);
    END;
    $$ LANGUAGE plpgsql;
    

    字符串函数

    字符串函数处理文本数据,可以返回修改后的字符串或关于字符串的信息。

    示例: 使用 ASCII 函数获取字符串首字符的ASCII码。

    CREATE FUNCTION GetFirstCharAscii(inputStr VARCHAR(255))
    RETURNS INTEGER
    AS $$
    BEGIN
      RETURN ASCII(inputStr);
    END;
    $$ LANGUAGE plpgsql;
    

    转换函数

    转换函数用于改变数据的类型。

    示例: 将字符串转换为整数。

    CREATE FUNCTION ConvertStringToInt(strVal VARCHAR(255))
    RETURNS INTEGER
    AS $$
    BEGIN
      RETURN CAST(strVal AS INTEGER);
    END;
    $$ LANGUAGE plpgsql;
    

    自定义复合类型(记录或行数据类型)

    虽然直接示例未提供复合类型返回,但在PL/pgSQL中,可以定义函数来返回记录或行数据类型。

    示例: 返回一个包含多个字段值的记录。

    CREATE TYPE EmployeeRecord AS (
        id INTEGER,
        name VARCHAR(50),
        department VARCHAR(50)
    );
    
    CREATE OR REPLACE FUNCTION GetEmployeeDetails(employeeId INTEGER)
    RETURNS SETOF EmployeeRecord
    AS $$
    BEGIN
      RETURN QUERY SELECT id, name, department FROM Employees WHERE id = employeeId;
    END;
    $$ LANGUAGE plpgsql;
    

    可参考最新的官方文档https://help.aliyun.com/zh/polardb/polardb-for-oracle/mathematical-functions?spm=a2c4g.11186623.0.i2

    2024-05-10 16:20:18
    赞同 3 展开评论 打赏

云原生数据库 PolarDB PostgreSQL 版是阿里云完全自主研发的云原生关系型数据库产品,100%兼容 PostgreSQL。

相关产品

  • 云原生数据库 PolarDB
  • 相关电子书

    更多
    云栖大会:开源 PolarDB 架构演进、关键技术与社区建设 立即下载
    2023云栖大会:和客户一起玩转PolarDB新特性 立即下载
    2023云栖大会:PolarDB for AI 立即下载