API de procédures stockées JavaScript

Cette rubrique couvre les API JavaScript pour les procédures stockées Snowflake. 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(...);
  ...
  $$
  ;
Copy

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

Constantes

Aucun.

Méthodes

addEvent(name[, attributes])

Ajoute un événement pour le traçage.

Pour plus d’informations sur les événements de trace avec JavaScript, voir Émettre des événements de trace en JavaScript

Paramètres:

name

Le nom de l’événement à ajouter.

attributes

Un objet spécifiant les attributs à associer à l’événement.

Erreurs:

Lance une erreur JavaScript si :

  • name n’est pas une chaîne.

  • Il y a zéro ou plus de deux arguments.

Exemples:

Ajoutez un événement my_event avec les attributs score et pass.

snowflake.addEvent('my_event', {'score': 89, 'pass': true});
Copy
createStatement(sql_command_object)

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);"}
   );
Copy

Cet exemple lie des valeurs :

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

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

execute(command)

Exécute une commande SQL.

Paramètres:

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

Renvoie:

Un jeu de résultats 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()).

log(level, message)

Enregistre un message au niveau de gravité spécifié.

Paramètres:

level

Niveau de gravité auquel le message doit être enregistré. Vous pouvez spécifier l’une des chaînes suivantes :

  • 'off'

  • 'trace'

  • 'debug'

  • 'info'

  • 'warn'

  • 'error'

  • 'fatal'

message

Le message à enregistrer.

Erreurs:

Lance une erreur JavaScript si :

  • level n’est pas une chaîne.

  • level n’est pas l’une des valeurs level prises en charge énumérées ci-dessus.

Exemples:
snowflake.log("error", "Error message");
Copy
setSpanAttribute(key, value)

Définit un attribut pour le span actuel lors du traçage des événements.

Pour plus d’informations sur les événements de trace avec JavaScript, voir Émettre des événements de trace en JavaScript

Paramètres:

key

Clé de l’attribut.

value

Valeur de l’attribut.

Erreurs:

Lance une erreur JavaScript si :

  • Deux arguments ne sont pas spécifiés.

  • key n’est pas une chaîne.

Exemples:

Définissez un attribut dont la clé est example.boolean et la valeur true.

snowflake.setSpanAttribute("example.boolean", true);
Copy

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

Aucun.

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 jeu de résultats 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.

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:

Aucun.

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

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

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.

getNumDuplicateRowsUpdated()

Cette méthode renvoie le nombre de lignes « dupliquées » (souvent appelées lignes multi-jointes) mises à jour par cette instruction. (Pour plus d’informations sur la façon dont les lignes multi-jointes sont formées, voir les Notes sur l’utilisation et exemples pour l’instruction UPDATE).

Paramètres:

Aucun.

Renvoie:

Une valeur de type Nombre qui indique le nombre de lignes multi-jointes mises à jour.

Erreurs:

Lance une erreur JavaScript si l’instruction n’a pas encore été exécutée.

getNumRowsAffected()

Cette méthode renvoie le nombre de lignes affectées (par exemple, insérées/mises à jour/supprimées) par cette instruction.

Si plus d’un type de changement s’applique (par exemple, une opération MERGE a inséré certaines lignes et en a mis d’autres à jour), alors le nombre est le nombre total de lignes affectées par tous les changements.

Paramètres:

Aucun.

Renvoie:

Une valeur de type Nombre qui indique le nombre de lignes affectées.

Erreurs:

Lance une erreur JavaScript si l’instruction n’a pas encore été exécutée.

getNumRowsDeleted()

Cette méthode renvoie le nombre de lignes supprimées par cette instruction.

Paramètres:

Aucun.

Renvoie:

Une valeur de type Nombre qui indique le nombre de lignes supprimées.

Erreurs:

Lance une erreur JavaScript si l’instruction n’a pas encore été exécutée.

getNumRowsInserted()

Cette méthode renvoie le nombre de lignes insérées par cette instruction.

Paramètres:

Aucun.

Renvoie:

Une valeur de type Nombre qui indique le nombre de lignes insérées.

Erreurs:

Lance une erreur JavaScript si l’instruction n’a pas encore été exécutée.

getNumRowsUpdated()

Cette méthode renvoie le nombre de lignes mises à jour par cette instruction.

Paramètres:

Aucun.

Renvoie:

Une valeur de type Nombre qui indique le nombre de lignes mises à jour.

Erreurs:

Lance une erreur JavaScript si l’instruction n’a pas encore été exécutée.

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:

Aucun.

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();
Copy
getQueryId()

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

Paramètres:

Aucun.

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();
Copy
getSqlText()

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

Paramètres:

Aucun.

Renvoie:

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

Erreurs:

Aucun.

Exemples:
var queryText = statement.getSqlText();
Copy
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

Aucun.

Méthodes

getColumnCount()

Cette méthode renvoie le nombre de colonnes de ce ResultSet.

Paramètres:

Aucun.

Renvoie:

Une valeur de type Nombre qui indique le nombre de colonnes.

Erreurs:

Aucun.

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

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

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

getNumRowsAffected()

Cette méthode renvoie le nombre de lignes affectées (par exemple, insérées/mises à jour/supprimées) par l’instruction qui a généré ce ResultSet.

Si plus d’un type de changement s’applique (par exemple, une opération MERGE a inséré certaines lignes et en a mis d’autres à jour), alors le nombre est le nombre total de lignes affectées par tous les changements.

Paramètres:

Aucun.

Renvoie:

Une valeur de type Nombre qui indique le nombre de lignes affectées.

Erreurs:

Aucun.

getQueryId()

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

Paramètres:

Aucun.

Renvoie:

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

Exemples:
var queryId = resultSet.getQueryId();
Copy
getRowCount()

Cette méthode renvoie le nombre de lignes dans ce ResultSet. (Il s’agit du nombre total de lignes, et non du nombre de lignes qui n’ont pas encore été consommées).

Paramètres:

Aucun.

Renvoie:

Une valeur de type Nombre qui indique le nombre de lignes.

Erreurs:

Aucun.

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:

Aucun.

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:

Aucun.

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

Aucun.

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:

Aucun.

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

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 |
+------------------------+
Copy
CALL test_get_epoch_seconds('1970-01-01 00:00:01.987654321');
+------------------------+
| TEST_GET_EPOCH_SECONDS |
|------------------------|
|                      1 |
+------------------------+
Copy
CALL test_get_epoch_seconds('1971-01-01 00:00:00');
+------------------------+
| TEST_GET_EPOCH_SECONDS |
|------------------------|
|               31536000 |
+------------------------+
Copy
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:

Aucun.

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

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 |
+------------------------+
Copy
CALL test_get_nano_seconds2('1970-01-01 00:00:01.987654321');
+------------------------+
| TEST_GET_NANO_SECONDS2 |
|------------------------|
|              987654321 |
+------------------------+
Copy
CALL test_get_nano_seconds2('1971-01-01 00:00:00.000123456');
+------------------------+
| TEST_GET_NANO_SECONDS2 |
|------------------------|
|                 123456 |
+------------------------+
Copy
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:

Aucun.

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

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 |
+----------------+
Copy

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 |
+----------------+
Copy

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 |
+----------------+
Copy
getTimezone()

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

Paramètres:

Aucun.

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

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 |
+-------------------+
Copy

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 |
+-------------------+
Copy
toString()
Paramètres:

Aucun.

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();
    $$
    ;
Copy
CALL test_toString('1970-01-02 03:04:05');
+------------------------------------------------------------------+
| TEST_TOSTRING                                                    |
|------------------------------------------------------------------|
| "Fri Jan 02 1970 03:04:05 GMT+0000 (Coordinated Universal Time)" |
+------------------------------------------------------------------+
Copy