Scalar JavaScript UDFs

本主题介绍标量 JavaScript UDFs(用户定义函数)。

本主题内容:

简介

标量 JavaScript UDF 为每个输入行返回一个输出行。输出行必须只包含一个列/一个值。

JavaScript UDFs 简介 中提供了一个基本示例。下面提供了其他示例。

备注

标量函数 (UDFs) 最多有 500 个输入实参。

示例

本节包含标量 JavaScript UDFs 的示例。

递归

下面的示例显示 JavaScript UDF 可以调用自身(即它可以使用递归)。

创建一个递归 UDF:

CREATE OR REPLACE FUNCTION RECURSION_TEST (STR VARCHAR)
  RETURNS VARCHAR
  LANGUAGE JAVASCRIPT
  AS $$
  return (STR.length <= 1 ? STR : STR.substring(0,1) + '_' + RECURSION_TEST(STR.substring(1)));
  $$
  ;
Copy

调用递归 UDF:

SELECT RECURSION_TEST('ABC');
+-----------------------+
| RECURSION_TEST('ABC') |
|-----------------------|
| A_B_C                 |
+-----------------------+
Copy

自定义异常

下面的示例演示引发自定义异常的 JavaScript UDF 示例。

创建函数:

CREATE FUNCTION validate_ID(ID FLOAT)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS $$
    try {
        if (ID < 0) {
            throw "ID cannot be negative!";
        } else {
            return "ID validated.";
        }
    } catch (err) {
        return "Error: " + err;
    }
$$;
Copy

创建包含有效值和无效值的表:

CREATE TABLE employees (ID INTEGER);
INSERT INTO employees (ID) VALUES 
    (1),
    (-1);
Copy

调用函数:

SELECT ID, validate_ID(ID) FROM employees ORDER BY ID;
+----+-------------------------------+
| ID | VALIDATE_ID(ID)               |
|----+-------------------------------|
| -1 | Error: ID cannot be negative! |
|  1 | ID validated.                 |
+----+-------------------------------+
Copy

故障排除

请参阅 JavaScript UDFs 故障排除

语言: 中文