API für gespeicherte Prozeduren

Unter diesem Thema wird die JavaScript-API für gespeicherte Snowflake-Prozeduren erläutert.

Gespeicherte Snowflake-Prozeduren sind in JavaScript geschrieben. Die API besteht aus JavaScript-Objekten und den Methoden in diesen Objekten.

Unter diesem Thema:

Objekt: snowflake

Auf das snowflake-Objekt kann standardmäßig mit dem JavaScript-Code einer gespeicherten Prozedur zugegriffen werden. Sie müssen das Objekt nicht erstellen. Dieses Objekt enthält die Methoden in der API für gespeicherte Prozeduren. Beispiel:

create procedure stproc1()
  returns string not null
  language javascript
  as
  -- "$$" is the delimiter for the beginning and end of the stored procedure.
  $$
  // The "snowflake" object is provided automatically in each stored procedure.
  // You don't need to create it.
  //         |||||||||
  //         vvvvvvvvv
  var statement = snowflake.createStatement(...);
  ...
  $$
  ;

Ausführlichere Codebeispiele finden Sie unter Verwenden von gespeicherten Prozeduren.

Konstanten

Keine.

Methoden

createStatement(sql_command_object)

Diese Methode erstellt ein Statement-Objekt und gibt es zurück. Die execute()-Methode für das Objekt kann später ausgeführt werden.

Parameter
sql_command_object:

Der Eingabeparameter ist ein JSON-Objekt (Wörterbuch), das den Text der auszuführenden Anweisung sowie alle Werte enthält, die an diese Anweisung gebunden werden sollen.

Rückgabewerte

Ein Statement-Objekt.

Fehler

Löst einen JavaScript-Fehler aus, wenn:

  • sqlText fehlt oder leeren Abfragetext enthält.

  • Die Anweisung versucht, ein Argument zu binden, dessen Datentyp nicht unterstützt wird. Weitere Informationen zur Zuordnung von Datentypen finden Sie unter Zuordnen von SQL- und JavaScript-Datentypen. Weitere Informationen zum Binden finden Sie unter Binden von Variablen.

Beispiele

Dieses Beispiel bindet keine Werte:

var stmt = snowflake.createStatement(
   {sqlText: "INSERT INTO table1 (col1) VALUES (1);"}
   );

Dieses Beispiel bindet Werte:

var stmt = snowflake.createStatement(
   {
   sqlText: "INSERT INTO table2 (col1, col2) VALUES (?, ?);",
   binds:["LiteralValue1", variable2]
   }
);

Weitere Informationen zum Binden, einschließlich zusätzlicher Beispiele, finden Sie unter Binden von Variablen.

execute(command)

Diese Methode führt direkt einen SQL-Befehl aus.

Parameter

Die Eingabe ist dieselbe wie bei der Methode createStatement().

Rückgabewerte

Ein Resultset in Form eines ResultSet-Objekts.

Fehler

Löst einen JavaScript-Fehler aus, wenn:

  • Beim Ausführen der Abfrage ist ein Fehler aufgetreten, z. B. ein Kompilierungsfehler.

  • sqlText fehlt oder leeren Abfragetext enthält.

  • Die Anweisung versucht, ein Argument zu binden, dessen Datentyp nicht unterstützt wird. Weitere Informationen zur Zuordnung von Datentypen finden Sie unter Zuordnen von SQL- und JavaScript-Datentypen. Weitere Informationen zum Binden, einschließlich zusätzlicher Beispiele, finden Sie unter Binden von Variablen.

Bemerkung

Diese execute()-Methode (z. B. snowflake.execute()) stimmt nicht genau mit der Methode im Statement-Objekt (z. B. Statement.execute()) überein.

Objekt: Statement

Ein Statement-Objekt für gespeicherte Prozeduren bietet die Methoden zum Ausführen einer Abfrageanweisung und zum Zugreifen auf Metadaten (z. B. Spaltendatentypen) über die Anweisung.

Zum Zeitpunkt der Erstellung des Anweisungsobjekts wird die SQL analysiert und eine vorbereitete Anweisung erstellt.

Konstanten

Keine.

Methoden

execute()

Diese Methode führt die vorbereitete Anweisung aus, die in diesem Statement-Objekt gespeichert ist.

Parameter

Keine, da die Methode Informationen verwendet, die bereits im Statement-Objekt gespeichert sind.

Rückgabewerte

Ein Resultset in Form eines ResultSet-Objekts.

Fehler

Löst einen JavaScript-Fehler aus, wenn die Abfrage fehlschlägt.

Beispiele

Siehe Verwenden von gespeicherten Prozeduren.

Bemerkung

Diese execute()-Methode (z. B. Statement.execute()) stimmt nicht genau mit der Methode im snowflake-Objekt (z. B. snowflake.execute()) überein.

snowflake.execute(statement_in_JSON_form) erfordert einen Parameter, bei dem es sich um die auszuführende SQL-Anweisung handelt. Statement.execute() akzeptiert keinen Parameter, sondern verwendet die SQL-Anweisung, die bei der Erstellung des Anweisungsobjekts angegeben wurde.

getQueryId()

Diese Methode gibt die UUID der zuletzt ausgeführten Abfrage zurück.

Parameter

Keine.

Rückgabewerte

Eine Zeichenfolge mit einer UUID, bei der es sich um die Abfrage-ID handelt.

Fehler

Wenn von dieser Anweisung noch keine Abfrage ausgeführt wurde, gibt die Methode den Fehler „Statement is not executed yet“ (Anweisung wurde noch nicht ausgeführt) aus.

Beispiele
var queryId = statement.getQueryId();
getSqlText()

Diese Methode gibt den Text der vorbereiteten Abfrage im Objekt Statement zurück.

Parameter

Keine.

Rückgabewerte

Eine Zeichenfolge des vorbereiteten Abfragetexts.

Fehler

Keine.

Beispiele
var queryText = statement.getSqlText();
getColumnCount()

Diese Methode gibt die Anzahl der Spalten im Resultset für eine ausgeführte Abfrage zurück. Wenn die Abfrage noch nicht ausgeführt wurde, löst die Methode einen Fehler aus.

Parameter

Keine.

Rückgabewerte

Die Anzahl der Spalten.

Fehler

Löst einen JavaScript-Fehler aus, wenn die Anweisung noch nicht ausgeführt wurde (und die Anzahl der zurückgegebenen Spalten daher nicht unbedingt ermittelt werden kann).

Beispiele
var column_count = statement.getColumnCount();
getRowCount()

Diese Methode gibt die Anzahl der Zeilen im Resultset für eine ausgeführte Abfrage zurück. Wenn die Abfrage noch nicht ausgeführt wurde, löst die Methode einen Fehler aus.

Parameter

Keine.

Rückgabewerte

Die Anzahl der Zeilen.

Fehler

Löst einen JavaScript-Fehler aus, wenn die Anweisung noch nicht ausgeführt wurde (und die Anzahl der zurückgegebenen Zeilen daher nicht ermittelt werden kann).

Beispiele
var row_count = statement.getRowCount();
getColumnSqlType(colIdx|colName)

Diese Methode gibt den SQL-Datentyp der angegebenen Spalte zurück.

Parameter

Entweder die Indexnummer der Spalte (beginnend mit 1, nicht 0) oder der Name der Spalte. (Die Methode ist überladen, um verschiedene Datentypen als Parameter zu akzeptieren.)

Der Spaltenname sollte nur in Großbuchstaben angegeben werden, es sei denn, beim Erstellen der Tabelle wurden für den Spaltennamen doppelte Anführungszeichen verwendet (d. h. die Groß-/Kleinschreibung des Spaltennamens wurde beibehalten).

Rückgabewerte

Der SQL-Datentyp der Spalte.

Fehler

Löst einen JavaScript-Fehler aus, wenn:

  • Die Statement wurde noch nicht ausgeführt.

  • Es ist keine Spalte mit dem angegebenen Namen oder Index vorhanden.

getColumnType(colIdx|colName)

Diese Methode gibt den JavaScript-Datentyp der angegebenen Spalte zurück.

Parameter

Entweder die Indexnummer der Spalte (beginnend mit 1, nicht 0) oder der Name der Spalte. (Die Methode ist überladen, um verschiedene Datentypen als Parameter zu akzeptieren.)

Der Spaltenname sollte nur in Großbuchstaben angegeben werden, es sei denn, beim Erstellen der Tabelle wurden für den Spaltennamen doppelte Anführungszeichen verwendet (d. h. die Groß-/Kleinschreibung des Spaltennamens wurde beibehalten).

Rückgabewerte

Der JavaScript-Datentyp der Spalte.

Fehler

Löst einen JavaScript-Fehler aus, wenn:

  • Die Statement wurde noch nicht ausgeführt.

  • Es ist keine Spalte mit dem angegebenen Index oder Namen vorhanden.

getColumnName(colIdx)

Diese Methode gibt den Namen der angegebenen Spalte zurück.

Parameter

Die Indexnummer der Spalte (beginnend mit 1, nicht 0).

Rückgabewerte

Der Name der Spalte.

Fehler

Löst einen JavaScript-Fehler aus, wenn:

  • Die Statement wurde noch nicht ausgeführt.

  • Es ist keine Spalte mit dem angegebenen Index vorhanden.

getColumnScale(colIdx)

Diese Methode gibt die Skalierung der angegebenen Spalte zurück. Die Skalierung ist die Anzahl der Nachkommastellen. Die Skalierung der Spalte wurde in der Anweisung CREATE TABLE oder ALTER TABLE angegeben. Beispiel:

create table scale_example  (
    n10_4 numeric(10, 4)    // Precision is 10, Scale is 4.
    );

Obwohl diese Methode für jeden Datentyp aufgerufen werden kann, ist sie für die Verwendung mit numerischen Datentypen vorgesehen.

Parameter

Der Index der Spalte, für die Sie die Skalierung in Erfahrung bringen möchten (beginnend mit 1, nicht 0).

Rückgabewerte

Die Skalierung der Spalte (bei numerischen Spalten); 0 bei nicht numerischen Spalten.

Fehler

Löst einen JavaScript-Fehler aus, wenn:

  • Die Statement wurde noch nicht ausgeführt.

  • Es ist keine Spalte mit dem angegebenen Index vorhanden.

Beispiele

Siehe Verwenden von gespeicherten Prozeduren (suchen Sie nach getColumnScale()).

isColumnNullable(colIdx)

Diese Methode gibt zurück, ob die angegebene Spalte SQL NULL-Werte zulässt.

Parameter

Der Index der Spalte (beginnend mit 1, nicht 0).

Rückgabewerte

true, wenn die Spalte SQL NULL-Werte zulässt; ansonsten false.

Fehler

Löst einen JavaScript-Fehler aus, wenn:

  • Die Statement wurde noch nicht ausgeführt.

  • Es ist keine Spalte mit dem angegebenen Index vorhanden.

isColumnText(colIdx)

Diese Methode gibt true zurück, wenn der Spaltendatentyp einer der folgenden SQL-Textdatentypen ist:

  • CHAR oder CHAR(N) sowie deren Synonyme CHARACTER und CHARACTER(N)

  • VARCHAR oder VARCHAR(N)

  • STRING

  • TEXT

Andernfalls wird false zurückgegeben.

Parameter

Der Index der Spalte (beginnend mit 1, nicht 0).

Rückgabewerte

true, wenn der Spaltendatentyp einer der SQL-Textdatentypen ist; false bei allen anderen Datentypen.

Fehler

Löst einen JavaScript-Fehler aus, wenn:

  • Die Statement wurde noch nicht ausgeführt.

  • Es ist keine Spalte mit dem angegebenen Index vorhanden.

Bemerkung

Die API bietet verschiedene Methoden zum Ermitteln des Datentyps einer Spalte. Die erste Methode ist oben ausführlich beschrieben. Die übrigen Methoden weisen dieselben Parameter und Fehler auf. Der einzige Unterschied ist der Rückgabewert.

isColumnArray(colIdx)
Rückgabewerte

true, wenn der Spaltendatentyp ARRAY lautet (bei semistrukturierten Daten); false bei allen anderen Datentypen.

isColumnBinary(colIdx)
Rückgabewerte

true, wenn der Spaltendatentyp BINARY oder VARBINARY lautet; false bei allen anderen Datentypen.

isColumnBoolean(colIdx)
Rückgabewerte

true, wenn der Spaltendatentyp BOOLEAN lautet; false bei allen anderen Datentypen.

isColumnDate(colIdx)
Rückgabewerte

true, wenn der Spaltendatentyp DATE lautet; false bei allen anderen Datentypen.

isColumnNumber(colIdx)
Rückgabewerte

true, wenn der Spaltendatentyp einer der numerischen SQL-Typen ist (NUMBER, NUMERIC, DECIMAL, INT, INTEGER, BIGINT, SMALLINT, TINYINT, BYTEINT, FLOAT, FLOAT4, FLOAT8, DOUBLE, DOUBLE PRECISION oder REAL); false bei allen anderen Datentypen.

isColumnObject(colIdx)
Rückgabewerte

true, wenn der Spaltendatentyp OBJECT lautet (bei semistrukturierten Daten); false bei allen anderen Datentypen.

isColumnTime(colIdx)
Rückgabewerte

true, wenn der Spaltendatentyp TIME oder DATETIME lautet; false bei allen anderen Datentypen.

isColumnTimestamp(colIdx)
Rückgabewerte

true, wenn der Spaltendatentyp einer der SQL-Zeitstempeltypen ist (TIMESTAMP, TIMESTAMP_LTZ, TIMESTAMP_NTZ oder TIMESTAMP_TZ); false bei allen anderen Datentypen, einschließlich anderer Datentypen für Datum und Uhrzeit (DATE, TIME oder DATETIME).

isColumnVariant(colIdx)
Rückgabewerte

true, wenn der Spaltendatentyp VARIANT lautet (bei semistrukturierten Daten); false bei allen anderen Datentypen.

Objekt: ResultSet

Dieses Objekt enthält die von einer Abfrage zurückgegebenen Ergebnisse. Die Ergebnisse werden als eine Menge von null oder mehr Zeilen behandelt, von denen jede eine oder mehrere Spalten enthält. Der Begriff „Menge“ wird hier nicht im mathematischen Sinne verwendet. In der Mathematik ist eine Menge ungeordnet, während ein ResultSet eine Reihenfolge aufweist.

Ein ResultSet ähnelt in gewisser Weise dem Konzept eines SQL-Cursors. Beispielsweise können Sie in einem ResultSet jeweils eine Zeile sehen, genauso wie Sie in einem Cursor jeweils eine Zeile sehen können.

Nachdem Sie ein ResultSet abgerufen haben, durchlaufen Sie es in der Regel, indem Sie die folgenden Vorgänge wiederholen:

  • Aufrufen von next(), um die nächste Zeile abzurufen.

  • Abrufen von Daten aus der aktuellen Zeile, indem Sie Methoden wie getColumnValue() aufrufen.

Wenn Sie nicht genug über die Daten im ResultSet wissen (z. B. den Datentyp der einzelnen Spalten nicht kennen), können Sie andere Methoden aufrufen, die Informationen über die Daten liefern.

Einige der Methoden des ResultSet-Objekts ähneln den Methoden des Statement-Objekts. Beispielsweise weisen beide Objekte eine getColumnSqlType(colIdx)-Methode auf.

Konstanten

Keine.

Methoden

next()

Diese Methode ruft die nächste Zeile im ResultSet ab und stellt sie für den Zugriff zur Verfügung.

Diese Methode gibt nicht die neue Datenzeile zurück. Stattdessen wird die Zeile verfügbar gemacht, sodass Sie Methoden wie ResultSet.getColumnValue() aufrufen können, um die Daten abzurufen.

Beachten Sie, dass Sie für jede Zeile im Resultset next() aufrufen müssen, einschließlich der ersten Zeile.

Parameter

Keine.

Rückgabewerte

true, wenn eine Zeile abgerufen wurde, und false, wenn keine weiteren Zeilen abgerufen werden müssen.

Sie können ResultSet also durchlaufen, bis next() false zurückgibt.

Fehler

Keine.

getColumnSqlType(colIdx|colName)

Diese Methode gibt den SQL-Datentyp der angegebenen Spalte zurück.

Parameter

Entweder die Indexnummer der Spalte (beginnend mit 1, nicht 0) oder der Name der Spalte. (Die Methode ist überladen, um verschiedene Datentypen als Parameter zu akzeptieren.)

Der Spaltenname sollte nur in Großbuchstaben angegeben werden, es sei denn, beim Erstellen der Tabelle wurden für den Spaltennamen doppelte Anführungszeichen verwendet (d. h. die Groß-/Kleinschreibung des Spaltennamens wurde beibehalten).

Rückgabewerte

Der SQL-Datentyp der Spalte.

Fehler

Löst einen JavaScript-Fehler aus, wenn:

  • ResultSet ist leer, oder next() wurde noch nicht aufgerufen.

  • Es ist keine Spalte mit dem angegebenen Index oder Namen vorhanden.

getColumnValue(colIdx|colName)

Diese Methode gibt den Wert einer Spalte in der aktuellen Zeile zurück (d. h. die Zeile, die zuletzt von next() abgerufen wurde).

Parameter

Entweder die Indexnummer der Spalte (beginnend mit 1, nicht 0) oder der Name der Spalte. (Die Methode ist überladen, um verschiedene Datentypen als Parameter zu akzeptieren.)

Der Spaltenname sollte nur in Großbuchstaben angegeben werden, es sei denn, beim Erstellen der Tabelle wurden für den Spaltennamen doppelte Anführungszeichen verwendet (d. h. die Groß-/Kleinschreibung des Spaltennamens wurde beibehalten).

Rückgabewerte

Der Wert der angegebenen Spalte.

Fehler

Löst einen JavaScript-Fehler aus, wenn:

  • ResultSet ist leer, oder next() wurde noch nicht aufgerufen.

  • Es ist keine Spalte mit dem angegebenen Index oder Namen vorhanden.

Beispiele

Konvertieren Sie eine Zeile in der Datenbank in ein JavaScript-Array:

var valueArray = [];
// For each row...
while (myResultSet.next())  {
    // Append each column of the current row...
    valueArray.push(myResultSet.getColumnValue('MY_COLUMN_NAME1'));
    valueArray.push(myResultSet.getColumnValue('MY_COLUMN_NAME2'));
    ...
    // Do something with the row of data that we retrieved.
    f(valueArray);
    // Reset the array before getting the next row.
    valueArray = [];
    }

Auf den Wert einer Spalte kann auch als Eigenschaft des Objekts ResultSet zugegriffen werden (z. B. myResultSet.MY_COLUMN_NAME).

var valueArray = [];
// For each row...
while (myResultSet.next())  {
    // Append each column of the current row...
    valueArray.push(myResultSet.MY_COLUMN_NAME1);
    valueArray.push(myResultSet.MY_COLUMN_NAME2);
    ...
    // Do something with the row of data that we retrieved.
    f(valueArray);
    // Reset the array before getting the next row.
    valueArray = [];
    }

Bemerkung

Denken Sie daran, dass der Spaltenname im JavaScript-Code nur in Großbuchstaben angegeben werden darf, wenn der Spaltenname in der Anweisung CREATE TABLE durch doppelte Anführungszeichen getrennt wurde.

getColumnValueAsString(colIdx|colName)

Diese Methode gibt den Wert einer Spalte als Zeichenfolge zurück. Dies ist nützlich, wenn Sie einen Spaltenwert unabhängig vom ursprünglichen Datentyp in der Tabelle benötigen.

Die Methode ist identisch mit der Methode getColumnValue(), abgesehen davon, dass ein Zeichenfolgenwert zurückgegeben wird.

Weitere Details dazu finden Sie unter getColumnValue().

getQueryId()

Diese Methode gibt die UUID der zuletzt ausgeführten Abfrage zurück.

Parameter

Keine.

Rückgabewerte

Eine Zeichenfolge mit einer UUID, bei der es sich um die Abfrage-ID handelt.

Beispiele
var queryId = resultSet.getQueryId();

Objekt: SfDate

JavaScript hat keinen nativen Datentyp, der den Snowflake SQL-Datentypen TIMESTAMP_LTZ, TIMESTAMP_NTZ und TIMESTAMP_TZ entspricht. Wenn Sie einen Wert vom Typ TIMESTAMP aus der Datenbank abrufen und ihn als JavaScript-Variable speichern möchten (beispielsweise den Wert aus einem ResultSet in eine JavaScript-Variable kopieren), verwenden Sie den Snowflake-definierten JavaScript-Datentyp SfDate. Der Datentyp SfDate („SnowFlake Date“) ist eine Erweiterung des JavaScript-Datentyps für Datumsangaben. SfDate verfügt über zusätzliche Methoden, die im Folgenden dokumentiert sind.

Konstanten

Keine.

Methoden

Sofern nicht anders angegeben, wird in den folgenden Beispielen die Zeitzone UTC angenommen.

getEpochSeconds()

Diese Methode gibt die Anzahl der Sekunden seit dem Beginn der „Epoche“ zurück (Mitternacht 1. Januar 1970).

Parameter

Keine.

Rückgabewerte

Die Anzahl der Sekunden zwischen Mitternacht des 1. Januar 1970 und dem in der Variablen gespeicherten Zeitstempel.

Beispiele

Erstellen Sie die gespeicherte Prozedur:

CREATE OR REPLACE PROCEDURE test_get_epoch_seconds(TSV VARCHAR)
    RETURNS FLOAT
    LANGUAGE JAVASCRIPT
    AS
    $$
    var sql_command = "SELECT '" + TSV + "'::TIMESTAMP_NTZ;";
    var stmt = snowflake.createStatement( {sqlText: sql_command} );
    var resultSet = stmt.execute();
    resultSet.next();
    var my_sfDate = resultSet.getColumnValue(1);
    return my_sfDate.getEpochSeconds();
    $$
    ;

Übergeben Sie der Prozedur verschiedene Zeitstempel, und rufen Sie die Anzahl der Sekunden seit der Epoche für jeden Zeitstempel ab.

CALL test_get_epoch_seconds('1970-01-01 00:00:00.000000000');
+------------------------+
| TEST_GET_EPOCH_SECONDS |
|------------------------|
|                      0 |
+------------------------+
CALL test_get_epoch_seconds('1970-01-01 00:00:01.987654321');
+------------------------+
| TEST_GET_EPOCH_SECONDS |
|------------------------|
|                      1 |
+------------------------+
CALL test_get_epoch_seconds('1971-01-01 00:00:00');
+------------------------+
| TEST_GET_EPOCH_SECONDS |
|------------------------|
|               31536000 |
+------------------------+
getNanoSeconds()

Diese Methode gibt den Wert des Nanosekundenfelds des Objekts zurück. Beachten Sie, dass dies nur die Sekundenbruchteile beinhaltet, nicht die Nanosekunden seit dem Beginn der Epoche. Daher liegt der Wert immer zwischen 0 und 999999999.

Parameter

Keine.

Rückgabewerte

Die Anzahl der Nanosekunden.

Beispiele

Erstellen Sie die gespeicherte Prozedur:

CREATE OR REPLACE PROCEDURE test_get_nano_seconds2(TSV VARCHAR)
    RETURNS FLOAT
    LANGUAGE JAVASCRIPT
    AS
    $$
    var sql_command = "SELECT '" + TSV + "'::TIMESTAMP_NTZ;";
    var stmt = snowflake.createStatement( {sqlText: sql_command} );
    var resultSet = stmt.execute();
    resultSet.next();
    var my_sfDate = resultSet.getColumnValue(1);
    return my_sfDate.getNanoSeconds();
    $$
    ;
-- Should be 0 nanoseconds.
-- (> SNIPPET_TAG=query_03_01
CALL test_get_nano_seconds2('1970-01-01 00:00:00.000000000');

Übergeben Sie der Prozedur verschiedene Zeitstempel, und rufen Sie jeweils die Anzahl der Nanosekunden ab.

CALL test_get_nano_seconds2('1970-01-01 00:00:00.000000000');
+------------------------+
| TEST_GET_NANO_SECONDS2 |
|------------------------|
|                      0 |
+------------------------+
CALL test_get_nano_seconds2('1970-01-01 00:00:01.987654321');
+------------------------+
| TEST_GET_NANO_SECONDS2 |
|------------------------|
|              987654321 |
+------------------------+
CALL test_get_nano_seconds2('1971-01-01 00:00:00.000123456');
+------------------------+
| TEST_GET_NANO_SECONDS2 |
|------------------------|
|                 123456 |
+------------------------+
getScale()

Diese Methode gibt die Genauigkeit des Datentyps zurück, d. h. die Anzahl der Nachkommastellen. Beispielsweise beträgt die Genauigkeit von TIMESTAMP_NTZ(3) 3 (Millisekunden). Die Genauigkeit von TIMESTAMP_NTZ(0) beträgt 0 (keine Sekundenbruchteile). Die Genauigkeit von TIMSTAMP_NTZ beträgt 9 (Nanosekunden).

Das Minimum ist 0. Das Maximum ist 9 (die Genauigkeit beläuft sich auf 1 Nanosekunde). Die Standardgenauigkeit ist 9.

Parameter

Keine.

Rückgabewerte

Die Anzahl der Stellen nach der Dezimalstelle (Anzahl der Stellen im Sekundenbruchteilfeld).

Beispiele

Erstellen Sie die gespeicherte Prozedur:

CREATE OR REPLACE PROCEDURE test_get_scale(TSV VARCHAR, SCALE VARCHAR)
    RETURNS FLOAT
    LANGUAGE JAVASCRIPT
    AS
    $$
    var sql_command = "SELECT '" + TSV + "'::TIMESTAMP_NTZ(" + SCALE + ");";
    var stmt = snowflake.createStatement( {sqlText: sql_command} );
    var resultSet = stmt.execute();
    resultSet.next();
    var my_sfDate = resultSet.getColumnValue(1);
    return my_sfDate.getScale();
    $$
    ;

-- Should be 0.
-- (> SNIPPET_TAG=query_04_01
CALL test_get_scale('1970-01-01 00:00:00', '0');

In diesem Beispiel ist der Zeitstempel als TIMESTAMP_NTZ(0) definiert, sodass die Genauigkeit 0 beträgt.

CALL test_get_scale('1970-01-01 00:00:00', '0');
+----------------+
| TEST_GET_SCALE |
|----------------|
|              0 |
+----------------+

In diesem Beispiel ist der Zeitstempel als TIMESTAMP_NTZ(2) definiert, sodass die Genauigkeit 2 beträgt.

CALL test_get_scale('1970-01-01 00:00:01.123', '2');
+----------------+
| TEST_GET_SCALE |
|----------------|
|              2 |
+----------------+

In diesem Beispiel ist der Zeitstempel als TIMESTAMP_NTZ definiert, sodass die Genauigkeit 9 beträgt; dies ist die Standardeinstellung.

CALL test_get_scale('1971-01-01 00:00:00.000123456', '9');
+----------------+
| TEST_GET_SCALE |
|----------------|
|              9 |
+----------------+
getTimezone()

Diese Methode gibt die Zeitzone als Zahl der Minuten vor oder nach UTC zurück.

Parameter

Keine.

Rückgabewerte

Die Zeitzone als Zahl der Minuten vor oder nach UTC.

Beispiele

Erstellen Sie die gespeicherte Prozedur:

CREATE OR REPLACE PROCEDURE test_get_Timezone(TSV VARCHAR)
    RETURNS FLOAT
    LANGUAGE JAVASCRIPT
    AS
    $$
    var sql_command = "SELECT '" + TSV + "'::TIMESTAMP_TZ;";
    var stmt = snowflake.createStatement( {sqlText: sql_command} );
    var resultSet = stmt.execute();
    resultSet.next();
    var my_sfDate = resultSet.getColumnValue(1);
    return my_sfDate.getTimezone();
    $$
    ;

In diesem Beispiel liegt die Zeitzone 8 Stunden (480 Minuten) hinter UTC.

CALL test_get_timezone('1970-01-01 00:00:01-08:00');
+-------------------+
| TEST_GET_TIMEZONE |
|-------------------|
|              -480 |
+-------------------+

In diesem Beispiel liegt die Zeitzone 11 Stunden (660 Minuten) vor UTC.

CALL test_get_timezone('1971-01-01 00:00:00.000123456+11:00');
+-------------------+
| TEST_GET_TIMEZONE |
|-------------------|
|               660 |
+-------------------+
toString()
Parameter

Keine.

Rückgabewerte

Diese Methode gibt eine Zeichenfolgendarstellung des Zeitstempels zurück.

Beispiele

Dies ist ein einfaches Beispiel für das Erstellen eines SfDate und das Aufrufen seiner toString-Methode:

CREATE OR REPLACE PROCEDURE test_toString(TSV VARCHAR)
    RETURNS VARIANT
    LANGUAGE JAVASCRIPT
    AS
    $$
    var sql_command = "SELECT '" + TSV + "'::TIMESTAMP_TZ;";
    var stmt = snowflake.createStatement( {sqlText: sql_command} );
    var resultSet = stmt.execute();
    resultSet.next();
    var my_sfDate = resultSet.getColumnValue(1);
    return my_sfDate.toString();
    $$
    ;
CALL test_toString('1970-01-02 03:04:05');
+-------------------------------------------+
| TEST_TOSTRING                             |
|-------------------------------------------|
| "Fri Jan 02 1970 03:04:05 GMT+0000 (UTC)" |
+-------------------------------------------+