Skalare JavaScript-UDFs

Unter diesem Thema werden skalare JavaScript-UDFs (benutzerdefinierte Funktion) behandelt.

Unter diesem Thema:

Einführung

Eine skalare JavaScript-UDF gibt für jede Eingabezeile eine Ausgabezeile zurück. Die Ausgabezeile darf nur eine Spalte/einen Wert enthalten.

Ein grundlegendes Beispiel finden Sie unter Einführung in JavaScript-UDFs. Weitere Beispiele sind weiter unten zu finden.

Beispiele

Dieser Abschnitt enthält Beispiele für skalare JavaScript-UDFs.

Im folgenden Beispiel wird zeigt, dass sich eine JavaScript-UDF selbst aufrufen kann (d. h. sie kann eine Rekursion verwenden):

Erstellen Sie eine rekursive 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)));
  $$
  ;

Rufen Sie die rekursive UDF auf:

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

Dieses Beispiel zeigt eine JavaScript-UDF, die eine benutzerdefinierte Ausnahme auslöst:

Erstellen Sie die Funktion:

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;
    }
$$;

Erstellen Sie eine Tabelle mit gültigen und ungültigen Werten:

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

Rufen Sie die Funktion auf:

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

Problembehandlung

Fehlermeldung: Variable is not defined

Ursache

In einigen Fällen kann diese Fehlermeldung durch ein kaufmännisches Und-Zeichen (&) innerhalb eines CREATE FUNCTION-Befehls verursacht werden, da das kaufmännische Und-Zeichen das Variablensubstitutionszeichen ist. Beispiel:

create function mask_bits(...)
    ...
    as
    $$
    var masked = (x & y);
    ...
    $$;

Der Fehler tritt zu dem Zeitpunkt auf, zu dem die Funktion erstellt wird, nicht zu dem Zeitpunkt, zu dem die Funktion aufgerufen wird.

Lösung

Wenn Sie die Variablensubstitution nicht verwenden möchten, können Sie sie explizit deaktivieren. In SnowSQL können Sie beispielsweise die Variablensubstitution deaktivieren, indem Sie den folgenden Befehl ausführen:

!set variable_substitution=false;

Weitere Informationen zur Variablenersetzung finden Sie unter Verwenden von Variablen.