创建用户定义的 SQL 函数
除了不能在表分区子句或投影分段子句中使用以外,用户定义的 SQL 函数可以在能够使用普通 SQL 表达式的任何查询中使用。
要创建 SQL 函数,用户必须拥有架构的 CREATE 权限。要使用 SQL 函数,用户必须拥有架构的 USAGE 权限和定义的函数的 EXECUTE 权限。
下面的语句可创建名为 myzeroifnull
的 SQL 函数,该函数接受 INTEGER
实参并返回 INTEGER
结果。
=> CREATE FUNCTION myzeroifnull(x INT) RETURN INT
AS BEGIN
RETURN (CASE WHEN (x IS NOT NULL) THEN x ELSE 0 END);
END;
只要使用普通 SQL 表达式,便可以使用新的 SQL 函数 (myzeroifnull
)。例如,创建一个简单表:
=> CREATE TABLE tabwnulls(col1 INT);
=> INSERT INTO tabwnulls VALUES(1);
=> INSERT INTO tabwnulls VALUES(NULL);
=> INSERT INTO tabwnulls VALUES(0);
=> SELECT * FROM tabwnulls;
a
---
1
0
(3 rows)
使用 myzeroifnull
函数(在 SELECT
语句中),其中函数从表 tabwnulls 中调用 col1
:
=> SELECT myzeroifnull(col1) FROM tabwnulls;
myzeroifnull
--------------
1
0
0
(3 rows)
使用 myzeroifnull
函数(在 GROUP BY
子句中):
=> SELECT COUNT(*) FROM tabwnulls GROUP BY myzeroifnull(col1);
count
-------
2
1
(2 rows)
如果要更改用户定义的 SQL 函数的主体,请使用 CREATE OR REPLACE
语法。以下命令修改了 CASE 表达式:
=> CREATE OR REPLACE FUNCTION myzeroifnull(x INT) RETURN INT
AS BEGIN
RETURN (CASE WHEN (x IS NULL) THEN 0 ELSE x END);
END;
要查看此信息在 Vertica 编录中的存储方式,请参阅查看有关 SQL 函数的信息。