Skip to content

CREATE FUNCTION...LANGUAGE SQL AS

语法说明

CREATE FUNCTION...LANGUAGE SQL AS 用于创建 SQL UDF。

SQL 自定义函数是一种用户自己编写的 SQL 函数,可以根据特定需求执行自定义操作。这些函数可以用于查询、数据转换等任务,使得 sQL 代码更加模块化和可维护。

MatrixOne SQL UDF 目前不支持重载,函数名在一个 matrixone 集群要求是唯一的。

语法结构

> CREATE [ OR REPLACE ] FUNCTION <name> (
[ <arg_name> <arg_data_type> ] [ , ... ] )
RETURNS <result_data_type>  LANGUAGE SQL AS 'function_body'

结构说明

  • <name>:指定自定义函数的名称。

  • <arg_name> <arg_data_type>:用于指定自定义函数的参数,这里的参数只有名称和类型。

  • RETURNS <result_data_type>:用于声明自定义函数返回值的数据类型,完整的数据类型请查看数据类型概览

  • function_body:自定义函数的主体部分。用户必须使用$1、$2,...以引用参数,而不是实际的参数名称。函数体支持 select 语句,且返回值唯一,如果 sql 函数体不是表达式,并且是表上的 select 语句,则查询应使用 limit 1 或不带 group by 子句的聚合函数将其结果限制为 1。

示例

示例 1

--创建无参 sql 自定义函数

mysql> create table t1(n1 int);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t1 values(1),(2),(3);
Query OK, 3 rows affected (0.01 sec)

mysql> CREATE FUNCTION t1_fun () RETURNS VARCHAR LANGUAGE SQL AS 'select n1 from t1 limit 1' ;
Query OK, 0 rows affected (0.01 sec)

mysql> select t1_fun();
+----------+
| t1_fun() |
+----------+
|        1 |
+----------+
1 row in set (0.01 sec)

示例 2

--创建 sql 自定义函数返回两个参数的和
mysql> CREATE FUNCTION twoadd (x int, y int) RETURNS int LANGUAGE SQL AS 'select $1 + $2' ;
Query OK, 0 rows affected (0.02 sec)

mysql> select twoadd(1,2);
+--------------+
| twoadd(1, 2) |
+--------------+
|            3 |
+--------------+
1 row in set (0.00 sec)