在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编写函数,增加了灵活性。
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
云原生数据库 PolarDB PostgreSQL 版是阿里云完全自主研发的云原生关系型数据库产品,100%兼容 PostgreSQL。