API de procedimentos armazenados em JavaScript

Este tópico abrange a API JavaScript para procedimentos armazenados do Snowflake. A API consiste em objetos JavaScript e os métodos nesses objetos.

Neste tópico:

Objeto: snowflake

O objeto snowflake pode ser acessado por padrão pelo código JavaScript em um procedimento armazenado; não é necessário criar o objeto. Esse objeto contém os métodos na API do procedimento armazenado. Por exemplo:

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

Exemplos de códigos mais extensos são fornecidos em Como trabalhar com procedimentos armazenados.

Constantes

Nenhum.

Métodos

addEvent(name[, attributes])

Adiciona um evento para rastreamento.

Para obter mais informações sobre eventos de rastreamento com JavaScript, consulte Emissão de eventos de rastreamento em JavaScript

Parâmetros:

name

O nome do evento a ser adicionado.

attributes

Um objeto que especifica os atributos a serem associados ao evento.

Erros:

Lança um erro JavaScript se:

  • name não é uma cadeia de caracteres.

  • Há zero ou mais de dois argumentos.

Exemplos:

Adicione um evento my_event com atributos score e pass.

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

Cria um objeto Statement e o retorna. O método execute() para o objeto pode ser executado depois.

Parâmetro(s):

sql_command_object

O parâmetro de entrada é um objeto JSON (dicionário) que contém o texto da instrução a ser executada e os valores que devem ser vinculados a essa instrução.

Retornos:

Um objeto Statement.

Erros:

Lança um erro JavaScript se:

Exemplos:

Este exemplo não vincula valores:

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

Este exemplo vincula valores:

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

Para obter mais informações sobre vinculações, incluindo exemplos adicionais, consulte Variáveis de vinculação.

execute(command)

Execute um comando SQL.

Parâmetros:

A entrada é a mesma que para o método createStatement().

Retornos:

Um resultado definido sob a forma de um objeto ResultSet.

Erros:

Lança um erro JavaScript se:

  • Um erro, como um erro de compilação, ocorreu durante a execução da consulta.

  • sqlText estiver faltando ou contiver um texto de consulta vazio.

  • A instrução tentar vincular um argumento cujo tipo de dados não é aceito. Para obter mais informações sobre o mapeamento do tipo de dados, consulte Mapeamentos de tipos de dados SQL e JavaScript. Para obter mais informações sobre vinculações, incluindo exemplos adicionais, consulte Variáveis de vinculação.

Nota

Este método execute() (por exemplo, snowflake.execute()) não é exatamente o mesmo que o método no objeto Statement (por exemplo, Statement.execute()).

log(level, message)

Registra uma mensagem no nível de gravidade especificado.

Parâmetros:

level

O nível de gravidade no qual a mensagem deve ser registrada. Você pode especificar uma das seguintes cadeias de caracteres:

  • 'off'

  • 'trace'

  • 'debug'

  • 'info'

  • 'warn'

  • 'error'

  • 'fatal'

message

A mensagem a ser registrada.

Erros:

Lança um erro JavaScript se:

  • level não é uma cadeia de caracteres.

  • level não é um dos valores level suportados listados acima.

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

Define um atributo para o span atual ao rastrear eventos.

Para obter mais informações sobre eventos de rastreamento com JavaScript, consulte Emissão de eventos de rastreamento em JavaScript

Parâmetros:

key

A chave do atributo.

value

O valor do atributo.

Erros:

Lança um erro JavaScript se:

  • Dois argumentos não são especificados.

  • key não é uma cadeia de caracteres.

Exemplos:

Define um atributo cuja chave seja example.boolean e cujo valor seja true.

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

Objeto: Statement

Um objeto de procedimento armazenado Statement fornece os métodos para executar uma instrução de consulta e acessar metadados (como tipos de dados em coluna) sobre a instrução.

No momento em que o objeto Statement é criado, o SQL é analisado, e uma instrução preparada é criada.

Constantes

Nenhum.

Métodos

execute()

Este método executa a instrução preparada armazenada nesse objeto Statement.

Parâmetros:

Nenhum porque o método utiliza informações que já estão armazenadas no objeto Statement.

Retornos:

Um resultado definido sob a forma de um objeto ResultSet.

Erros:

Lança um erro JavaScript se a consulta falhar.

Exemplos:

Consulte Como trabalhar com procedimentos armazenados.

Nota

Este método execute() (por exemplo, Statement.execute()) não é exatamente o mesmo que o método no objeto snowflake (por exemplo, snowflake.execute()).

snowflake.execute(statement_in_JSON_form) requer um parâmetro, que é a instrução SQL a ser executada. Statement.execute() não toma um parâmetro; ele usa a instrução SQL que foi especificada no momento em que o objeto Statement foi criado.

getColumnCount()

Este método retorna o número de colunas no conjunto de resultados para uma consulta executada. Se a consulta ainda não tiver sido executada, este método lança um erro.

Parâmetros:

Nenhum.

Retornos:

O número de colunas.

Erros:

Lança um erro JavaScript se a instrução ainda não tiver sido executada (e, portanto, o número de colunas retornadas não pode necessariamente ser determinado).

Exemplos:
var column_count = statement.getColumnCount();
Copy
getColumnName(colIdx)

Este método retorna o nome da coluna especificada.

Parâmetros:

O número de índice da coluna (a partir de 1, não 0).

Retornos:

O nome da coluna.

Erros:

Lança um erro JavaScript se:

  • A Statement ainda não foi executada.

  • Não existe coluna com o índice especificado.

getColumnScale(colIdx)

Este método retorna a escala da coluna especificada. A escala é o número de dígitos após a vírgula decimal. A escala da coluna foi especificada na instrução CREATE TABLE ou ALTER TABLE. Por exemplo:

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

Embora este método possa ser chamado para qualquer tipo de dados, ele se destina ao uso com tipos de dados numéricos.

Parâmetros:

O índice da coluna para a qual você quer a escala (a partir de 1, não 0).

Retornos:

A escala da coluna (para colunas numéricas); 0 para não numéricas (colunas).

Erros:

Lança um erro JavaScript se:

  • A Statement ainda não foi executada.

  • Não existe coluna com o índice especificado.

Exemplos:

Consulte Como trabalhar com procedimentos armazenados (busque getColumnScale()).

getColumnSqlType(colIdx|colName)

Este método retorna o tipo de dados SQL da coluna especificada.

Parâmetros:

O número de índice da coluna (a partir de 1, e não 0) ou o nome da coluna. (O método é sobrecarregado para aceitar diferentes tipos de dados como parâmetros).

O nome da coluna deve ser todo em letras maiúsculas, a menos que, quando a tabela foi criada, tenham sido usadas aspas duplas no nome da coluna (ou seja, as letras minúsculas/maiúsculas do nome da coluna foram preservadas).

Retornos:

O tipo de dados SQL da coluna.

Erros:

Lança um erro JavaScript se:

  • A Statement ainda não foi executada.

  • Não existe coluna com o nome ou índice especificado.

getColumnType(colIdx|colName)

Este método retorna o tipo de dados JavaScript da coluna especificada.

Parâmetros:

O número de índice da coluna (a partir de 1, e não 0) ou o nome da coluna. (O método é sobrecarregado para aceitar diferentes tipos de dados como parâmetros).

O nome da coluna deve ser todo em letras maiúsculas, a menos que, quando a tabela foi criada, tenham sido usadas aspas duplas no nome da coluna (ou seja, as letras minúsculas/maiúsculas do nome da coluna foram preservadas).

Retornos:

O tipo de dados JavaScript da coluna.

Erros:

Lança um erro JavaScript se:

  • A Statement ainda não foi executada.

  • Não existe coluna com o índice ou nome especificado.

getNumDuplicateRowsUpdated()

Este método retorna o número de linhas “duplicadas” (muitas vezes chamadas de linhas de junção múltipla) atualizadas por este Statement. (Para obter mais informações sobre como são formadas as linhas de junção múltipla, consulte as Notas de uso e exemplos para a instrução UPDATE).

Parâmetros:

Nenhum.

Retornos:

Um valor do tipo Número que indica o número de linhas de junção múltipla atualizadas.

Erros:

Lança um erro JavaScript se a instrução ainda não tiver sido executada.

getNumRowsAffected()

Este método retorna o número de linhas afetadas (por exemplo, inseridas/atualizadas/excluídas) por este Statement.

Se mais de um tipo de alteração se aplicar (por exemplo, uma operação MERGE inseriu algumas linhas e atualizou outras), então o número é o número total de linhas afetadas por todas as alterações.

Parâmetros:

Nenhum.

Retornos:

Um valor do tipo Número que indica o número de linhas afetadas.

Erros:

Lança um erro JavaScript se a instrução ainda não tiver sido executada.

getNumRowsDeleted()

Este método retorna o número de linhas excluídas por este Statement.

Parâmetros:

Nenhum.

Retornos:

Um valor do tipo Número que indica o número de linhas excluídas.

Erros:

Lança um erro JavaScript se a instrução ainda não tiver sido executada.

getNumRowsInserted()

Este método retorna o número de linhas inseridas por este Statement.

Parâmetros:

Nenhum.

Retornos:

Um valor do tipo Número que indica o número de linhas inseridas.

Erros:

Lança um erro JavaScript se a instrução ainda não tiver sido executada.

getNumRowsUpdated()

Este método retorna o número de linhas atualizadas por este Statement.

Parâmetros:

Nenhum.

Retornos:

Um valor do tipo Número que indica o número de linhas atualizadas.

Erros:

Lança um erro JavaScript se a instrução ainda não tiver sido executada.

getRowCount()

Este método retorna o número de linhas no conjunto de resultados para uma consulta executada. Se a consulta ainda não tiver sido executada, este método lança um erro.

Parâmetros:

Nenhum.

Retornos:

O número de linhas.

Erros:

Lança um erro JavaScript se a instrução ainda não tiver sido executada (e, portanto, o número de linhas retornadas não pode ser determinado).

Exemplos:
var row_count = statement.getRowCount();
Copy
getQueryId()

Este método retorna o UUID da consulta mais recente executada.

Parâmetros:

Nenhum.

Retornos:

Uma cadeia de caracteres contendo um UUID, que é a ID da consulta.

Erros:

Se nenhuma consulta foi executada ainda por esta instrução, o método lança o erro “Statement is not executed yet” (Instrução ainda não executada).

Exemplos:
var queryId = statement.getQueryId();
Copy
getSqlText()

Este método retorna o texto da consulta preparada no objeto Statement.

Parâmetros:

Nenhum.

Retornos:

Uma cadeia de caracteres do texto da consulta preparada.

Erros:

Nenhum.

Exemplos:
var queryText = statement.getSqlText();
Copy
isColumnNullable(colIdx)

Este método retorna se a coluna especificada permite valores SQL NULL.

Parâmetros:

O índice da coluna (a partir de 1, não 0).

Retornos:

true se a coluna permitir valores SQL NULL; caso contrário, false.

Erros:

Lança um erro JavaScript se:

  • A Statement ainda não foi executada.

  • Não existe coluna com o índice especificado.

isColumnText(colIdx)

Este método retorna true se o tipo de dados da coluna for um dos seguintes tipos de dados de texto SQL:

  • CHAR ou CHAR(N), assim como seus sinônimos CHARACTER e CHARACTER(N)

  • VARCHAR ou VARCHAR(N)

  • STRING

  • TEXT

Caso contrário, ele retorna false.

Parâmetros:

O índice da coluna (a partir de 1, não 0).

Retornos:

true se o tipo de dados da coluna for um dos tipos de dados de texto SQL; false para todos os outros tipos de dados.

Erros:

Lança um erro JavaScript se:

  • A Statement ainda não foi executada.

  • Não existe coluna com o índice especificado.

Nota

A API fornece vários métodos para determinar o tipo de dados de uma coluna. O primeiro método é descrito em detalhes acima. Os demais métodos têm os mesmos parâmetros e erros; a única diferença é o valor de retorno.

isColumnArray(colIdx)
Retornos:

true se o tipo de dados da coluna for ARRAY (para dados semiestruturados); false para todos os outros tipos de dados.

isColumnBinary(colIdx)
Retornos:

true se o tipo de dados da coluna for BINARY ou VARBINARY; false para todos os outros tipos de dados.

isColumnBoolean(colIdx)
Retornos:

true se o tipo de dados da coluna for BOOLEAN; false para todos os outros tipos de dados.

isColumnDate(colIdx)
Retornos:

true se o tipo de dados da coluna for DATE; false para todos os outros tipos de dados.

isColumnNumber(colIdx)
Retornos:

true se o tipo de dados da coluna for um dos tipos numéricos SQL (NUMBER, NUMERIC, DECIMAL, INT, INTEGER, BIGINT, SMALLINT, TINYINT, BYTEINT, FLOAT, FLOAT4, FLOAT8, DOUBLE, DOUBLE PRECISION ou REAL); false para todos os outros tipos de dados.

isColumnObject(colIdx)
Retornos:

true se o tipo de dados da coluna for OBJECT (para dados semiestruturados); false para todos os outros tipos de dados.

isColumnTime(colIdx)
Retornos:

true se o tipo de dados da coluna for TIME ou DATETIME; false para todos os outros tipos de dados.

isColumnTimestamp(colIdx)
Retornos:

true se o tipo de dados da coluna for um dos tipos de carimbo de data/hora SQL (TIMESTAMP, TIMESTAMP_LTZ, TIMESTAMP_NTZ ou TIMESTAMP_TZ); false para todos os outros tipos de dados, incluindo outros tipos de dados de data e hora (DATE, TIME ou DATETIME).

isColumnVariant(colIdx)
Retornos:

true se o tipo de dados da coluna for VARIANT (para dados semiestruturados); false para todos os outros tipos de dados.

Objeto: ResultSet

Este objeto contém os resultados retornados por uma consulta. Os resultados são tratados como um conjunto de zero ou mais linhas, cada uma das quais contendo uma ou mais colunas. O termo “set” (conjunto) não é usado aqui no sentido matemático. Na matemática, um conjunto é desordenado, enquanto um ResultSet tem uma ordem.

Um ResultSet é semelhante, em alguns aspectos, ao conceito de um cursor SQL. Por exemplo, você pode ver uma linha de cada vez em um ResultSet, assim como você pode ver uma linha de cada vez em um cursor.

Normalmente, depois de recuperar um ResultSet, você itera através dele repetindo as seguintes operações:

  • Chamar next() para obter a próxima linha.

  • Recuperar dados da linha atual usando métodos de chamada, como getColumnValue().

Se você não souber o suficiente sobre os dados no ResultSet (por exemplo, você não sabe o tipo de dados de cada coluna), então você pode chamar outros métodos que forneçam informações sobre os dados.

Alguns dos métodos do objeto ResultSet são similares aos métodos do objeto Statement. Por exemplo, ambos os objetos têm um método getColumnSqlType(colIdx).

Constantes

Nenhum.

Métodos

getColumnCount()

Este método retorna o número de colunas nesse ResultSet.

Parâmetros:

Nenhum.

Retornos:

Um valor do tipo Número que indica o número de colunas.

Erros:

Nenhum.

getColumnSqlType(colIdx|colName)

Este método retorna o tipo de dados SQL da coluna especificada.

Parâmetros:

O número de índice da coluna (a partir de 1, e não 0) ou o nome da coluna. (O método é sobrecarregado para aceitar diferentes tipos de dados como parâmetros).

O nome da coluna deve ser todo em letras maiúsculas, a menos que, quando a tabela foi criada, tenham sido usadas aspas duplas no nome da coluna (ou seja, as letras minúsculas/maiúsculas do nome da coluna foram preservadas).

Retornos:

O tipo de dados SQL da coluna.

Erros:

Lança um erro JavaScript se:

  • ResultSet está vazio ou next() ainda não foi chamado.

  • Não existe coluna com o índice ou nome especificado.

getColumnValue(colIdx|colName)

Este método retorna o valor de uma coluna na linha atual (ou seja, a linha obtida mais recentemente por next()).

Parâmetros:

O número de índice da coluna (a partir de 1, e não 0) ou o nome da coluna. (O método é sobrecarregado para aceitar diferentes tipos de dados como parâmetros).

O nome da coluna deve ser todo em letras maiúsculas, a menos que, quando a tabela foi criada, tenham sido usadas aspas duplas no nome da coluna (ou seja, as letras minúsculas/maiúsculas do nome da coluna foram preservadas).

Retornos:

O valor da coluna especificada.

Erros:

Lança um erro JavaScript se:

  • ResultSet está vazio ou next() ainda não foi chamado.

  • Não existe coluna com o índice ou nome especificado.

Exemplos:

Converter uma linha no banco de dados em uma matriz 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

Além disso, o valor de uma coluna pode ser acessado como propriedade do objeto ResultSet (por exemplo, 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

Nota

Lembre-se de que, a menos que o nome da coluna tenha sido delimitado com aspas duplas na instrução CREATE TABLE, o nome da coluna deve ser todo em maiúsculas no código JavaScript.

getColumnValueAsString(colIdx|colName)

Este método retorna o valor de uma coluna como uma cadeia de caracteres, o que é útil quando você precisa de um valor de coluna independentemente do tipo de dados original na tabela.

O método é idêntico ao método getColumnValue(), exceto que ele retorna um valor de cadeia de caracteres.

Para obter mais detalhes, consulte getColumnValue().

getNumRowsAffected()

Este método retorna o número de linhas afetadas (por exemplo, inseridas/atualizadas/excluídas) pelo Statement que gerou este ResultSet.

Se mais de um tipo de alteração se aplicar (por exemplo, uma operação MERGE inseriu algumas linhas e atualizou outras), então o número é o número total de linhas afetadas por todas as alterações.

Parâmetros:

Nenhum.

Retornos:

Um valor do tipo Número que indica o número de linhas afetadas.

Erros:

Nenhum.

getQueryId()

Este método retorna o UUID da consulta mais recente executada.

Parâmetros:

Nenhum.

Retornos:

Uma cadeia de caracteres contendo um UUID, que é a ID da consulta.

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

Este método retorna o número de linhas neste ResultSet. (Este é o número total de linhas, não o número de linhas que ainda não foram consumidas).

Parâmetros:

Nenhum.

Retornos:

Um valor do tipo Número que indica o número de linhas.

Erros:

Nenhum.

next()

Este método obtém a próxima linha no ResultSet e a disponibiliza para acesso.

Este método não devolve a nova linha de dados. Em vez disso, ele disponibiliza a linha para que você possa chamar métodos como ResultSet.getColumnValue() para recuperar os dados.

Observe que você deve chamar next() para cada linha do conjunto de resultados, incluindo a primeira linha.

Parâmetros:

Nenhum.

Retornos:

true se ele recuperou uma linha e false se não há mais linhas para recuperar.

Assim, você pode iterar através de ResultSet até next() retornar false.

Erros:

Nenhum.

Objeto: SfDate

JavaScript não tem um tipo de dados nativo que corresponda aos tipos de dados SQL do Snowflake TIMESTAMP_LTZ, TIMESTAMP_NTZ e TIMESTAMP_TZ. Quando você recuperar um valor do tipo TIMESTAMP do banco de dados e quiser armazená-lo como uma variável JavaScript (por exemplo, copiar o valor de um ResultSet para uma variável JavaScript), use o tipo de dados JavaScript definido pelo Snowflake SfDate. O tipo de dados SfDate (“SnowFlake Date”) é uma extensão do tipo de dados JavaScript de data. SfDate tem métodos extras, que estão documentados abaixo.

Constantes

Nenhum.

Métodos

A menos que especificado de outra forma, os exemplos abaixo consideram o fuso horário UTC.

getEpochSeconds()

Este método retorna o número de segundos desde o início da “época” (meia-noite de 1.º de janeiro de 1970).

Parâmetros:

Nenhum.

Retornos:

O número de segundos entre a meia-noite de 1.º de janeiro de 1970 e o carimbo de data/hora armazenado na variável.

Exemplos:

Crie o procedimento armazenado:

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

Passe ao procedimento diferentes carimbos de data/hora e recupere o número de segundos desde a época para cada carimbo de data/hora.

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

Este método retorna o valor do campo de nanossegundos do objeto. Note que estes são apenas os segundos fracionários, não os nanossegundos desde o início da época. Assim, o valor está sempre entre 0 e 999999999.

Parâmetros:

Nenhum.

Retornos:

O número de nanossegundos.

Exemplos:

Crie o procedimento armazenado:

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

Passe ao procedimento diferentes carimbos de data/hora e recupere o número de nanossegundos de cada um.

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

Este método retorna a precisão do tipo de dados, ou seja, o número de dígitos após a vírgula decimal. Por exemplo, a precisão de TIMESTAMP_NTZ(3) é 3 (milissegundos). A precisão de TIMESTAMP_NTZ(0) é 0 (sem frações de segundos). A precisão de TIMSTAMP_NTZ é 9 (nanossegundos).

O mínimo é 0. O máximo é 9 (a precisão é de 1 nanossegundo). A precisão padrão é 9.

Parâmetros:

Nenhum.

Retornos:

O número de dígitos após a casa decimal (número de dígitos no campo de segundos fracionários).

Exemplos:

Crie o procedimento armazenado:

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

Neste exemplo, o carimbo de data/hora é definido como TIMESTAMP_NTZ(0), portanto a precisão é 0.

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

Neste exemplo, o carimbo de data/hora é definido como TIMESTAMP_NTZ(2), portanto a precisão é 2.

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

Neste exemplo, o carimbo de data/hora é definido como TIMESTAMP_NTZ, portanto a precisão é 9, que é o padrão.

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

Este método retorna o fuso horário como o número de minutos antes ou depois do UTC.

Parâmetros:

Nenhum.

Retornos:

O fuso horário como um número de minutos antes ou depois do UTC.

Exemplos:

Crie o procedimento armazenado:

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

Neste exemplo, o fuso horário é 8 horas (480 minutos) atrás do UTC.

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

Neste exemplo, o fuso horário é 11 horas (660 minutos) à frente do UTC.

CALL test_get_timezone('1971-01-01 00:00:00.000123456+11:00');
+-------------------+
| TEST_GET_TIMEZONE |
|-------------------|
|               660 |
+-------------------+
Copy
toString()
Parâmetros:

Nenhum.

Retornos:

Este método retorna uma representação em cadeia de caracteres do carimbo de data/hora.

Exemplos:

Isto mostra um exemplo simples de criação de um SfDate e chamada do seu método 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