暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GaussDB中的Function示例与解析

db_user 2023-09-20
177

常见Function操作(创建、调用、删除等)

1、示例一:定义函数为SQL查询

--定义函数为SQL查询

CREATE FUNCTION func_add_sql(integer, integer) RETURNS integer

AS 'select $1 + $2;'

LANGUAGE SQL

IMMUTABLE

RETURNS NULL ON NULL INPUT;

--调用

SELECT func_add_sql(1,9);

--DROP

DROP FUNCTION func_add_sql;

调用结果:

解析说明:

这段代码是在创建一个名为'func_add_sql'的SQL函数,这个函数接受两个整数作为输入参数,并返回它们的和。

“CREATE FUNCTION”:这是一个SQL命令,用于创建新的函数。

“func_add_sql”:这是创建的函数的名称。

“RETURNS integer”:这指定了函数的返回类型为整数。

“IMMUTABLE”:这是一个特性,表明这个函数总是返回相同的结果,当给定相同的输入时。也就是说,这个函数不依赖于任何外部状态或数据,它的结果不会变化。

“RETURNS NULL ON NULL INPUT”:表明如果任何一个输入参数为NULL,函数将返回NULL。

“LANGUAGE SQL”:这指定了函数用SQL语言编写。

“'select $1 + $2;'”:这是函数的主体。$1和$2是参数引用,分别代表输入的两个参数。

2、示例二:返回一个包含多个输出参数的记录

--返回一个包含多个输出参数的记录。

CREATE FUNCTION func_dup_sql(in int, out f1 int, out f2 text)

AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$

LANGUAGE SQL;

--调用

SELECT * FROM func_dup_sql(10);

--DROP

DROP FUNCTION func_dup_sql;

调用结果:

解析说明:

这个函数名为func_dup_sql,它接受一个输入参数(标记为in),并产生两个输出(标记为f1和f2)。

函数体内部使用 $$ 标记代码块,里面是一个SELECT语句,它返回输入参数$1的两个不同形式的值。对于f1,它直接返回输入的整数值。对于f2,它将输入的整数值转换为一个文本字符串,并在其后添加字符串' is text'。这个转换是使用CAST函数完成的,它将$1从整数值转换为文本字符串。

这个函数的语言是SQL,这表示它是在SQL的上下文中执行的。总的来说,这个函数接受一个整数作为输入,然后返回两个值:一个整数和一个由整数生成并添加了文本后缀的字符串。

3、示例三:返回RECORD类型结果集

--返回RECORD类型

CREATE OR REPLACE FUNCTION compute(i int, out result_1 bigint, out result_2 bigint)

returns SETOF RECORD

as $$

begin

result_1 = i + 1;

result_2 = i * 10;

return next;

end;

$$ language plpgsql;

--调用

SELECT compute(10);

--DROP

DROP FUNCTION compute;

调用结果:

解析说明:

这是一个GaussDB数据库兼容PL/pgSQL自定义函数的定义。此函数名为compute,它接受一个整数参数i,并返回一个记录集,其中包含两个字段:result_1和result_2,它们都是大整数类型(bigint)。

在函数的主体中,定义了以下操作:

“result_1 = i + 1;”:将参数i加1后的结果赋值给result_1。

“result_2 = i * 10;”:将参数i乘以10的结果赋值给result_2。

“return next;”:返回结果集中的下一行。由于这个函数只返回了一行,所以这行将在第一次调用时返回。

“$$ language plpgsql;”: 声明这个函数的编程语言是兼容PL/pgSQL。

当调用这个函数时,你可以传入一个整数参数,它将返回一个结果集,其中包含一个记录,其result_1字段的值为输入的整数加1,result_2字段的值为输入的整数乘以10。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论