Procédures stockées - API

Cette rubrique couvre les API JavaScript pour les procédures stockées Snowflake.

Les procédures stockées Snowflake sont écrites en JavaScript. L’API est composée d’objets JavaScript et des méthodes qu’ils contiennent.

Dans ce chapitre :

Objet : snowflake

L’objet snowflake est accessible par défaut au code JavaScript d’une procédure stockée ; vous n’avez pas besoin de créer l’objet. Cet objet contient les méthodes dans l’API de la procédure stockée. Par exemple :

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(...);
  ...
  $$
  ;

Des exemples de code plus complets sont fournis dans Travailler avec des procédures stockées.

Constantes

Zéro.

Méthodes

createStatement(sql_command_object)

Cette méthode crée un objet Statement et le renvoie. La méthode execute() de l’objet peut être exécutée ultérieurement.

Paramètre(s)
sql_command_object:

Le paramètre d’entrée est un objet JSON (dictionnaire) contenant le texte de l’instruction à exécuter et toutes les valeurs devant être liées à cette instruction.

Renvoie

Un objet Statement.

Erreurs

Lance une erreur JavaScript si :

  • sqlText est manquant ou contient un texte de requête vide.

  • L’instruction tente de lier un argument dont le type de données n’est pas pris en charge. Pour plus d’informations sur le mappage des types de données, voir Mappage de type de données SQL et JavaScript. Pour plus d’informations sur la liaison, voir Variables de liaison.

Exemples

Cet exemple ne lie aucune valeur :

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

Cet exemple lie des valeurs :

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

Pour plus d’informations sur la liaison, y compris des exemples supplémentaires, voir Variables de liaison.

execute(command)

Cette méthode exécute directement une commande SQL.

Paramètres

La saisie est la même que pour la méthode createStatement().

Renvoie

Un résultat défini sous la forme d’un objet ResultSet.

Erreurs

Lance une erreur JavaScript si :

  • Une erreur, telle qu’une erreur de compilation, s’est produite lors de l’exécution de la requête.

  • sqlText est manquant ou contient un texte de requête vide.

  • L’instruction tente de lier un argument dont le type de données n’est pas pris en charge. Pour plus d’informations sur le mappage des types de données, voir Mappage de type de données SQL et JavaScript. Pour plus d’informations sur la liaison, y compris des exemples supplémentaires, voir Variables de liaison.

Note

Cette méthode execute() (par exemple, snowflake.execute()) n’est pas exactement identique à la méthode de l’objet Statement (par exemple, Statement.execute()).

Objet : Statement

Un objet de procédure stockée Statement fournit les méthodes permettant d’exécuter une instruction de requête et d’accéder à des métadonnées (telles que des types de données de colonnes) relatives à l’instruction.

Au moment de la création de l’objet Instruction, SQL est analysé et une instruction préparée est créée.

Constantes

Zéro.

Méthodes

execute()

Cette méthode exécute l’instruction préparée stockée dans cet objet Statement.

Paramètres

Aucune, car la méthode utilise des informations déjà stockées dans l’objet Statement.

Renvoie

Un résultat défini sous la forme d’un objet ResultSet.

Erreurs

Lance une erreur JavaScript en cas d’échec de la requête.

Exemples

Voir Travailler avec des procédures stockées.

Note

Cette méthode execute() (par exemple, Statement.execute()) n’est pas exactement identique à la méthode de l’objet snowflake (par exemple, snowflake.execute()).

snowflake.execute(statement_in_JSON_form) nécessite un paramètre, qui est l’instruction SQL à exécuter. Statement.execute() ne prend aucun paramètre ; il utilise l’instruction SQL spécifiée au moment de la création de l’objet Instruction.

getQueryId()

Cette méthode renvoie le UUID de la dernière requête exécutée.

Paramètres

Zéro.

Renvoie

Une chaîne contenant un UUID, qui correspond à l’ID de la requête.

Erreurs

Si aucune requête n’a encore été exécutée par cette instruction, la méthode lève l’erreur « L’instruction n’est pas encore exécutée ».

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

Cette méthode renvoie le texte de la requête préparée dans l’objet Statement.

Paramètres

Zéro.

Renvoie

Une chaîne du texte de requête préparé.

Erreurs

Zéro.

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

Cette méthode renvoie le nombre de colonnes dans le jeu de résultats pour une requête exécutée. Si la requête n’a pas encore été exécutée, cette méthode génère une erreur.

Paramètres

Zéro.

Renvoie

Le nombre de colonnes.

Erreurs

Lance une erreur JavaScript si l’instruction n’a pas encore été exécutée (le nombre de colonnes retournées ne peut donc nécessairement pas être déterminé).

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

Cette méthode retourne le nombre de lignes dans le jeu de résultats pour une requête exécutée. Si la requête n’a pas encore été exécutée, cette méthode génère une erreur.

Paramètres

Zéro.

Renvoie

Le nombre de lignes.

Erreurs

Lance une erreur JavaScript si l’instruction n’a pas encore été exécutée (et donc le nombre de lignes retournées ne peut pas être déterminé).

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

Cette méthode renvoie le type de données SQL de la colonne spécifiée.

Paramètres

Soit le numéro d’index de la colonne (à partir de 1, pas 0), soit le nom de la colonne. (La méthode est surchargée pour accepter différents types de données en tant que paramètres.)

Le nom de la colonne doit être entièrement écrit en majuscules, sauf si des guillemets doubles ont été utilisés dans le nom de la colonne lors de la création de la table (autrement dit, la casse du nom de la colonne a été préservée).

Renvoie

Le type de données SQL de la colonne.

Erreurs

Lance une erreur JavaScript si :

  • Le Statement n’a pas encore été exécuté.

  • Aucune colonne avec le nom ou l’index spécifié n’existe.

getColumnType(colIdx|colName)

Cette méthode renvoie le type de données JavaScript de la colonne spécifiée.

Paramètres

Soit le numéro d’index de la colonne (à partir de 1, pas 0), soit le nom de la colonne. (La méthode est surchargée pour accepter différents types de données en tant que paramètres.)

Le nom de la colonne doit être entièrement écrit en majuscules, sauf si des guillemets doubles ont été utilisés dans le nom de la colonne lors de la création de la table (autrement dit, la casse du nom de la colonne a été préservée).

Renvoie

Le type de données JavaScript de la colonne.

Erreurs

Lance une erreur JavaScript si :

  • Le Statement n’a pas encore été exécuté.

  • Aucune colonne avec l’index ou le nom spécifié n’existe.

getColumnName(colIdx)

Cette méthode retourne le nom de la colonne spécifiée.

Paramètres

Le numéro d’index de la colonne (à partir de 1 et non de 0).

Renvoie

Le nom de la colonne.

Erreurs

Lance une erreur JavaScript si :

  • Le Statement n’a pas encore été exécuté.

  • Aucune colonne avec l’index spécifié n’existe.

getColumnScale(colIdx)

Cette méthode renvoie l’échelle de la colonne spécifiée. L’échelle est le nombre de chiffres après le point décimal. L’échelle de la colonne a été spécifiée dans l’instruction CREATE TABLE ou ALTER TABLE. Par exemple :

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

Bien que cette méthode puisse être appelée pour tout type de données, elle est destinée à être utilisée avec des types de données numériques.

Paramètres

L’index de la colonne pour laquelle vous voulez l’échelle (à partir de 1, pas 0).

Renvoie

L’échelle de la colonne (pour les colonnes numériques) ; 0 pour les colonnes non numériques.

Erreurs

Lance une erreur JavaScript si :

  • Le Statement n’a pas encore été exécuté.

  • Aucune colonne avec l’index spécifié n’existe.

Exemples

Voir Travailler avec des procédures stockées (recherchez getColumnScale()).

isColumnNullable(colIdx)

Cette méthode indique si la colonne spécifiée autorise les valeurs SQL NULL.

Paramètres

L’index de la colonne (à partir de 1, pas 0).

Renvoie

true si la colonne autorise les valeurs SQL NULL ; sinon, false.

Erreurs

Lance une erreur JavaScript si :

  • Le Statement n’a pas encore été exécuté.

  • Aucune colonne avec l’index spécifié n’existe.

isColumnText(colIdx)

Cette méthode retourne true si le type de données de la colonne est l’un des types de données texte SQL suivants :

  • CHAR ou CHAR(N), ainsi que leurs synonymes CHARACTER et CHARACTER(N)

  • VARCHAR ou VARCHAR(N)

  • STRING

  • TEXT

Sinon, il retourne faux.

Paramètres

L’index de la colonne (à partir de 1, pas 0).

Renvoie

true si le type de données de la colonne est l’un des types de données texte SQL ; false pour tous les autres types de données.

Erreurs

Lance une erreur JavaScript si :

  • Le Statement n’a pas encore été exécuté.

  • Aucune colonne avec l’index spécifié n’existe.

Note

L’API fournit plusieurs méthodes pour déterminer le type de données d’une colonne. La première méthode est décrite en détail ci-dessus. Les méthodes restantes ont les mêmes paramètres et les mêmes erreurs. La seule différence est la valeur de retour.

isColumnArray(colIdx)
Renvoie

true si le type de données de la colonne est ARRAY (pour les données semi-structurées) ; false pour tous les autres types de données.

isColumnBinary(colIdx)
Renvoie

true si le type de données de la colonne est BINARY ou VARBINARY ; false pour tous les autres types de données.

isColumnBoolean(colIdx)
Renvoie

true si le type de données de la colonne est BOOLEAN ; false pour tous les autres types de données.

isColumnDate(colIdx)
Renvoie

true si le type de données de la colonne est DATE ; false pour tous les autres types de données.

isColumnNumber(colIdx)
Renvoie

true si le type de données de la colonne est l’un des types SQL numériques (NUMBER, NUMERIC, DECIMAL, INT, INTEGER, BIGINT, SMALLINT, TINYINT, BYTEINT, FLOAT, FLOAT4, FLOAT8, DOUBLE, DOUBLE PRECISION ou REAL) ; false pour tous les autres types de données.

isColumnObject(colIdx)
Renvoie

true si le type de données de la colonne est OBJECT (pour les données semi-structurées) ; false pour tous les autres types de données.

isColumnTime(colIdx)
Renvoie

true si le type de données de la colonne est TIME ou DATETIME ; false pour tous les autres types de données.

isColumnTimestamp(colIdx)
Renvoie

true si le type de données de la colonne est l’un des types d’horodatage SQL (TIMESTAMP, TIMESTAMP_LTZ, TIMESTAMP_NTZ ou TIMESTAMP_TZ) ; false pour tous les autres types de données, y compris les autres types de données de date et d’heure (DATE, TIME ou DATETIME).

isColumnVariant(colIdx)
Renvoie

true si le type de données de la colonne est VARIANT (pour les données semi-structurées) ; false pour tous les autres types de données.

Objet : ResultSet

Cet objet contient les résultats renvoyés par une requête. Les résultats sont traités comme un ensemble de zéro ou plusieurs lignes, chacune contenant une ou plusieurs colonnes. Le terme « ensemble » n’est pas utilisé ici au sens mathématique. En mathématiques, un ensemble est non ordonné, alors qu’un ResultSet a un ordre.

Un ResultSet ressemble à certains égards au concept de curseur SQL. Par exemple, vous pouvez voir une ligne à la fois dans un ResultSet, tout comme vous pouvez voir une ligne à la fois dans un curseur.

Généralement, après avoir récupéré un ResultSet, vous le parcourez en répétant les opérations suivantes :

  • Appelez next() pour obtenir la ligne suivante.

  • Récupérez les données de la ligne en cours en appelant des méthodes telles que getColumnValue().

Si vous ne connaissez pas suffisamment les données du ResultSet (par exemple, vous ne connaissez pas le type de données de chaque colonne), vous pouvez appeler d’autres méthodes fournissant des informations sur les données.

Certaines des méthodes de l’objet ResultSet sont similaires à celles de l’objet Statement. Par exemple, les deux objets ont une méthode getColumnSqlType(colIdx).

Constantes

Zéro.

Méthodes

next()

Cette méthode obtient la ligne suivante du ResultSet et la rend accessible.

Cette méthode ne renvoie pas la nouvelle ligne de données. Au lieu de cela, elle rend la ligne disponible afin que vous puissiez appeler des méthodes telles que ResultSet.getColumnValue() pour récupérer les données.

Notez que vous devez appeler next() pour chaque ligne du jeu de résultats, en incluant la première ligne.

Paramètres

Zéro.

Renvoie

true s’il a récupéré une ligne et false s’il n’y a plus de lignes à récupérer.

Ainsi, vous pouvez parcourir ResultSet jusqu’à ce que next() renvoie false.

Erreurs

Zéro.

getColumnSqlType(colIdx|colName)

Cette méthode renvoie le type de données SQL de la colonne spécifiée.

Paramètres

Soit le numéro d’index de la colonne (à partir de 1, pas 0), soit le nom de la colonne. (La méthode est surchargée pour accepter différents types de données en tant que paramètres.)

Le nom de la colonne doit être entièrement écrit en majuscules, sauf si des guillemets doubles ont été utilisés dans le nom de la colonne lors de la création de la table (autrement dit, la casse du nom de la colonne a été préservée).

Renvoie

Le type de données SQL de la colonne.

Erreurs

Lance une erreur JavaScript si :

  • ResultSet est vide ou next() n’a pas encore été appelé.

  • Aucune colonne avec l’index ou le nom spécifié n’existe.

getColumnValue(colIdx|colName)

Cette méthode renvoie la valeur d’une colonne de la ligne actuelle (c’est-à-dire la dernière ligne récupérée par next()).

Paramètres

Soit le numéro d’index de la colonne (à partir de 1, pas 0), soit le nom de la colonne. (La méthode est surchargée pour accepter différents types de données en tant que paramètres.)

Le nom de la colonne doit être entièrement écrit en majuscules, sauf si des guillemets doubles ont été utilisés dans le nom de la colonne lors de la création de la table (autrement dit, la casse du nom de la colonne a été préservée).

Renvoie

La valeur de la colonne spécifiée.

Erreurs

Lance une erreur JavaScript si :

  • ResultSet est vide ou next() n’a pas encore été appelé.

  • Aucune colonne avec l’index ou le nom spécifié n’existe.

Exemples

Convertissez une ligne de la base de données en un tableau JavaScript :

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 = [];
    }

La valeur d’une colonne est également accessible en tant que propriété de l’objet ResultSet (par exemple, 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 = [];
    }

Note

N’oubliez pas que, à moins que le nom de la colonne ne soit délimité par des guillemets dans l’instruction CREATE TABLE, le nom de la colonne doit être tout en majuscules dans le code JavaScript.

getColumnValueAsString(colIdx|colName)

Cette méthode renvoie la valeur d’une colonne sous forme de chaîne, ce qui est utile lorsque vous avez besoin d’une valeur de colonne, quel que soit le type de données d’origine dans la table.

La méthode est identique à la méthode getColumnValue() sauf qu’elle renvoie une valeur de chaîne.

Pour plus de détails, voir getColumnValue().

getQueryId()

Cette méthode renvoie le UUID de la dernière requête exécutée.

Paramètres

Zéro.

Renvoie

Une chaîne contenant un UUID, qui correspond à l’ID de la requête.

Exemples
var queryId = resultSet.getQueryId();

Objet : SfDate

JavaScript n’a pas de type de données natif qui correspond aux types de données Snowflake SQL TIMESTAMP_LTZ, TIMESTAMP_NTZ et TIMESTAMP_TZ. Lorsque vous récupérez une valeur de type TIMESTAMP dans la base de données et souhaitez la stocker en tant que variable JavaScript (par exemple, pour copier la valeur d’un ResultSet dans une variable JavaScript), utilisez SfDate du type de données JavaScript défini par Snowflake. Le type de données SfDate (« date SnowFlake ») est une extension du type de données de date JavaScript. SfDate propose des méthodes supplémentaires, décrites ci-dessous.

Constantes

Zéro.

Méthodes

Sauf indication contraire, les exemples ci-dessous tiennent compte du fuseau horaire UTC.

getEpochSeconds()

Cette méthode renvoie le nombre de secondes écoulées depuis le début de « l’époque » (minuit, 1er janvier, 1970).

Paramètres

Zéro.

Renvoie

Nombre de secondes entre minuit, 1er janvier, 1970 et l’horodatage stocké dans la variable.

Exemples

Créez la procédure stockée :

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();
    $$
    ;

Transmettez les différents horodatages de procédure et récupérez le nombre de secondes écoulées depuis l’époque pour chaque horodatage.

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()

Cette méthode renvoie la valeur du champ nanosecondes de l’objet. Notez qu’il ne s’agit que de la fraction de seconde, et non des nanosecondes depuis le début de l’époque. Ainsi, la valeur est toujours comprise entre 0 et 999999999.

Paramètres

Zéro.

Renvoie

Le nombre de nanosecondes.

Exemples

Créez la procédure stockée :

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');

Transmettez les différents horodatages de procédure et récupérez le nombre de nanosecondes de chacun.

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()

Cette méthode renvoie la précision du type de données, c’est-à-dire le nombre de chiffres après le point décimal. Par exemple, la précision de TIMESTAMP_NTZ(3) est égale à 3 (millisecondes). La précision de TIMESTAMP_NTZ(0) est 0 (pas de fraction de seconde). La précision de TIMSTAMP_NTZ est 9 (nanosecondes).

Le minimum est 0. Le maximum est 9 (la précision est de 1 nanoseconde). La précision par défaut est 9.

Paramètres

Zéro.

Renvoie

Le nombre de chiffres après la décimale (nombre de chiffres dans le champ de secondes fractionnaires).

Exemples

Créez la procédure stockée :

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');

Dans cet exemple, l’horodatage est défini sur TIMESTAMP_NTZ(0), la précision est donc 0.

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

Dans cet exemple, l’horodatage est défini sur TIMESTAMP_NTZ(2), la précision est donc 2.

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

Dans cet exemple, l’horodatage est défini sur TIMESTAMP_NTZ. Par conséquent, la précision est 9, la valeur par défaut.

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

Cette méthode renvoie le fuseau horaire sous la forme du nombre de minutes avant ou après UTC.

Paramètres

Zéro.

Renvoie

Le fuseau horaire est indiqué en nombre de minutes avant ou après UTC.

Exemples

Créez la procédure stockée :

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();
    $$
    ;

Dans cet exemple, le fuseau horaire est de 8 heures (480 minutes) en retard par rapport à UTC.

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

Dans cet exemple, le fuseau horaire est de 11 heures (660 minutes) en avance par rapport à UTC.

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

Zéro.

Renvoie

Cette méthode retourne une représentation sous forme de chaîne de l’horodatage.

Exemples

Cela montre un exemple simple de création de SfDate et d’appel de sa méthode toString :

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)" |
+-------------------------------------------+