UDFs JavaScript scalaires

Cette chapitre traite des UDFs JavaScript scalaires (fonctions définies par l’utilisateur).

Dans ce chapitre :

Introduction

Une UDF JavaScript renvoie une ligne de sortie pour chaque ligne d’entrée. La ligne de sortie ne doit contenir qu’une seule colonne/valeur.

Un exemple de base se trouve dans Présentation des UDFs JavaScript. D’autres exemples sont présentés ci-dessous.

Note

Les fonctions scalaires (UDFs) ont une limite de 500 arguments d’entrée.

Exemples

Cette section contient des exemples d” UDFs JavaScript scalaires.

Récursivité

Cet exemple montre qu’une UDF JavaScript peut s’appeler elle-même (c’est-à-dire qu’elle peut utiliser la récursivité).

Créez un UDF récursif :

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

Appelez l’UDF récursif :

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

Exception personnalisée

Cet exemple montre une UDF JavaScript qui lève une exception personnalisée.

Créez la fonction :

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

Créez une table avec des valeurs valides et non valides :

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

Appelez la fonction :

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

Dépannage

Voir Dépannage d’UDFs JavaScript.