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(...); ... $$ ;
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 atributosscore
epass
.snowflake.addEvent('my_event', {'score': 89, 'pass': true});
- createStatement(sql_command_object)¶
Cria um objeto
Statement
e o retorna. O métodoexecute()
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:
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ção, consulte Variáveis de vinculação.
- Exemplos:
Este exemplo não vincula valores:
var stmt = snowflake.createStatement( {sqlText: "INSERT INTO table1 (col1) VALUES (1);"} );
Este exemplo vincula valores:
var stmt = snowflake.createStatement( { sqlText: "INSERT INTO table2 (col1, col2) VALUES (?, ?);", binds:["LiteralValue1", variable2] } );
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 objetoStatement
(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 valoreslevel
suportados listados acima.
- Exemplos:
snowflake.log("error", "Error message");
- 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 sejatrue
.snowflake.setSpanAttribute("example.boolean", true);
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:
Nota
Este método
execute()
(por exemplo,Statement.execute()
) não é exatamente o mesmo que o método no objetosnowflake
(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();
- 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ão0
).- 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. );
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ão0
).- 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ão0
) 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ão0
) 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();
- 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();
- 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();
- 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ão0
).- 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ão0
).- 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ão0
) 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 ounext()
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ão0
) 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 ounext()
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 = []; }
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 = []; }
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();
- 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 efalse
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(); $$ ;
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 | +------------------------+
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()¶
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');
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 | +------------------------+
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()¶
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');
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 | +----------------+
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 | +----------------+
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 | +----------------+
- 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(); $$ ;
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 | +-------------------+
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 | +-------------------+
- 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étodotoString
: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 (Coordinated Universal Time)" | +------------------------------------------------------------------+