创建用户定义的 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 函数的信息

另请参阅