JavaScript 저장 프로시저 API¶
이 항목에서는 Snowflake 저장 프로시저를 위한 JavaScript API를 다룹니다. API는 JavaScript 오브젝트와 그러한 오브젝트의 메서드로 구성됩니다.
이 항목의 내용:
오브젝트: snowflake
¶
snowflake
오브젝트는 기본적으로 저장 프로시저의 JavaScript 코드에 액세스할 수 있으며, 이 오브젝트를 만들 필요가 없습니다. 이 오브젝트는 저장 프로시저 API에 메서드를 포함합니다. 예:
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(...); ... $$ ;
저장 프로시저 작업하기 에 더 광범위한 코드 예가 제공됩니다.
상수¶
없습니다.
메서드¶
- addEvent(name[, attributes])¶
추적을 위한 이벤트를 추가합니다.
JavaScript에서 추적 이벤트에 대한 자세한 내용은 JavaScript에서 추적 이벤트 내보내기 섹션을 참조하십시오.
- 매개 변수:
name
추가할 이벤트의 이름입니다.
attributes
이벤트와 연결할 특성을 지정하는 오브젝트입니다.
- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
name
은 문자열이 아닙니다.0개 또는 3개 이상의 인자가 있습니다.
- 예:
score
및pass
특성이 있는my_event
이벤트를 추가합니다.snowflake.addEvent('my_event', {'score': 89, 'pass': true});
- createStatement(sql_command_object)¶
Statement
오브젝트를 만들고 반환합니다. 오브젝트의execute()
메서드는 나중에 실행할 수 있습니다.- 매개 변수:
sql_command_object
이 입력 매개 변수는 실행할 문의 텍스트와 해당 문에 바인딩해야 하는 값을 포함하는 JSON 오브젝트(사전)입니다.
- 반환:
Statement
오브젝트입니다.- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
sqlText
가 없거나 빈 쿼리 텍스트를 포함하는 경우.이 문은 지원되지 않는 데이터 타입을 가진 인자를 바인딩하려고 하는 경우. 데이터 타입 매핑에 대한 자세한 내용은 SQL 및 JavaScript 데이터 타입 매핑 을 참조하십시오. 바인딩에 대한 자세한 내용은 변수 바인딩하기 를 참조하십시오.
- 예:
다음 예에서는 어떤 값도 바인딩하지 않습니다.
var stmt = snowflake.createStatement( {sqlText: "INSERT INTO table1 (col1) VALUES (1);"} );
다음 예에서는 값을 바인딩합니다.
var stmt = snowflake.createStatement( { sqlText: "INSERT INTO table2 (col1, col2) VALUES (?, ?);", binds:["LiteralValue1", variable2] } );
추가 예제를 포함하여 바인딩에 대한 자세한 내용은 변수 바인딩하기 를 참조하십시오.
- execute(command)¶
SQL 명령을 실행합니다.
- 매개 변수:
이 입력은
createStatement()
메서드에 대해 입력과 동일합니다.- 반환:
ResultSet
오브젝트 형식의 결과 세트.- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
쿼리를 실행하는 동안 컴파일 오류와 같은 오류가 발생한 경우.
sqlText
가 없거나 빈 쿼리 텍스트를 포함하는 경우.이 문은 지원되지 않는 데이터 타입을 가진 인자를 바인딩하려고 하는 경우. 데이터 타입 매핑에 대한 자세한 내용은 SQL 및 JavaScript 데이터 타입 매핑 을 참조하십시오. 추가 예제를 포함하여 바인딩에 대한 자세한 내용은 변수 바인딩하기 를 참조하십시오.
참고
이
execute()
메서드(예:snowflake.execute()
)는Statement
오브젝트(예:Statement.execute()
)의 메서드와 정확히 같지는 않습니다.
- log(level, message)¶
지정된 심각도 수준에서 메시지를 로깅합니다.
- 매개 변수:
level
메시지를 기록할 심각도 수준입니다. 다음 문자열 중 하나를 지정할 수 있습니다.
'off'
'trace'
'debug'
'info'
'warn'
'error'
'fatal'
message
기록할 메시지입니다.
- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
level
은 문자열이 아닙니다.level
은 위에 나열된 지원되는level
값 중 하나가 아닙니다.
- 예:
snowflake.log("error", "Error message");
- setSpanAttribute(key, value)¶
이벤트를 추적할 때 현재 범위의 특성을 설정합니다.
JavaScript에서 추적 이벤트에 대한 자세한 내용은 JavaScript에서 추적 이벤트 내보내기 섹션을 참조하십시오.
- 매개 변수:
key
특성의 키입니다.
value
특성의 값입니다.
- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
두 인자가 지정되지 않았습니다.
key
는 문자열이 아닙니다.
- 예:
키가
example.boolean
이고 값이true
인 특성을 설정합니다.snowflake.setSpanAttribute("example.boolean", true);
오브젝트: Statement
¶
저장 프로시저 Statement
오브젝트는 쿼리 문을 실행하고 이 문에 대한 메타데이터(예: 열 데이터 타입)에 액세스하기 위한 메서드를 제공합니다.
Statement 오브젝트가 생성되는 시점에, SQL이 구문 분석되고 준비된 문이 생성됩니다.
상수¶
없습니다.
메서드¶
- execute()
이 메서드는 이
Statement
오브젝트에 저장된 준비된 문을 실행합니다.- 매개 변수:
이 메서드는
Statement
오브젝트에 이미 저장된 정보를 사용하므로 없습니다.- 반환:
ResultSet
오브젝트 형식의 결과 세트.- 오류:
쿼리가 실패할 경우 JavaScript Error를 발생시킵니다.
- 예:
저장 프로시저 작업하기 섹션을 참조하십시오.
참고
이
execute()
메서드(예:Statement.execute()
)는snowflake
오브젝트(예:snowflake.execute()
)의 메서드와 정확히 같지는 않습니다.snowflake.execute(statement_in_JSON_form)
에는 실행할 SQL 문인 매개 변수가 필요합니다.Statement.execute()
는 매개 변수를 받지 않으며, Statement 오브젝트가 생성될 때 지정했던 SQL 문을 사용합니다.
- getColumnCount()¶
이 메서드는 실행된 쿼리에 대한 결과 세트의 열 개수를 반환합니다. 쿼리가 아직 실행되지 않은 경우 이 메서드는 Error를 발생시킵니다.
- 매개 변수:
없습니다.
- 반환:
열 개수.
- 오류:
문이 아직 실행되지 않은 경우 JavaScript Error를 발생시킵니다(따라서 반환된 열의 수를 반드시 결정할 수 있는 것은 아님).
- 예:
var column_count = statement.getColumnCount();
- getColumnName(colIdx)¶
이 메서드는 지정된 열의 이름을 반환합니다.
- 매개 변수:
열의 인덱스 번호(
0
이 아니라1
부터 시작함).- 반환:
열 이름.
- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
Statement
가 아직 실행되지 않은 경우.지정된 인덱스를 가진 열이 없는 경우.
- getColumnScale(colIdx)¶
이 메서드는 지정된 열의 소수 자릿수를 반환합니다. 소수 자릿수는 소수점 이하 자릿수입니다. 열의 소수 자릿수는 CREATE TABLE 문 또는 ALTER TABLE 문에 지정되었습니다. 예:
create table scale_example ( n10_4 numeric(10, 4) // Precision is 10, Scale is 4. );
이 메서드는 모든 데이터 타입에 대해 호출할 수 있지만, 숫자 데이터 타입과 함께 사용하기 위한 메서드입니다.
- 매개 변수:
소수 자릿수가 필요한 열의 인덱스(
0
이 아니라1
부터 시작함).- 반환:
열의 소수 자릿수(숫자 열의 경우). 숫자가 아닌 열의 경우에는
0
.- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
Statement
가 아직 실행되지 않은 경우.지정된 인덱스를 가진 열이 없는 경우.
- 예:
저장 프로시저 작업하기 를 참조하십시오(
getColumnScale()
검색).
- getColumnSqlType(colIdx|colName)¶
이 메서드는 지정된 열의 SQL 데이터 타입을 반환합니다.
- 매개 변수:
열의 인덱스 번호(
0
이 아니라1
부터 시작함) 또는 열 이름. (다양한 데이터 타입을 매개 변수로 허용하도록 메서드가 오버로드됩니다.)테이블 생성 시 열 이름에 큰따옴표를 사용하지 않은 경우(즉, 열 이름의 대/소문자가 유지됨) 열 이름은 모두 대문자여야 합니다.
- 반환:
열의 SQL 데이터 타입.
- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
Statement
가 아직 실행되지 않은 경우.지정된 이름 또는 인덱스를 가진 열이 없는 경우.
- getColumnType(colIdx|colName)¶
이 메서드는 지정된 열의 JavaScript 데이터 타입을 반환합니다.
- 매개 변수:
열의 인덱스 번호(
0
이 아니라1
부터 시작함) 또는 열 이름. (다양한 데이터 타입을 매개 변수로 허용하도록 메서드가 오버로드됩니다.)테이블 생성 시 열 이름에 큰따옴표를 사용하지 않은 경우(즉, 열 이름의 대/소문자가 유지됨) 열 이름은 모두 대문자여야 합니다.
- 반환:
열의 JavaScript 데이터 타입.
- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
Statement
가 아직 실행되지 않은 경우.지정된 인덱스 또는 이름을 가진 열이 없는 경우.
- getNumDuplicateRowsUpdated()¶
이 메서드는 이 문으로 업데이트된 “중복” 행(종종 다중 조인 행 이라고 함)의 수를 반환합니다. (다중 조인 행의 형성 방법에 대한 자세한 내용은 UPDATE 문에 대한 사용법 노트 및 예 를 참조하십시오.)
- 매개 변수:
없습니다.
- 반환:
업데이트된 다중 조인 행의 개수를 나타내는 Number 형식의 값.
- 오류:
문이 아직 실행되지 않은 경우 JavaScript 오류를 발생시킵니다.
- getNumRowsAffected()¶
이 메서드는 이 Statement의 영향을 받는(예: 삽입/업데이트/삭제된) 행의 개수를 반환합니다.
두 가지 이상의 변경 유형이 적용되는 경우(예: MERGE 작업이 어떤 행은 삽입하고 다른 행은 업데이트한 경우), 이 수는 모든 변경 사항의 영향을 받는 행의 총수입니다.
- 매개 변수:
없습니다.
- 반환:
영향을 받는 행의 개수를 나타내는 Number 형식의 값.
- 오류:
문이 아직 실행되지 않은 경우 JavaScript 오류를 발생시킵니다.
- getNumRowsDeleted()¶
이 메서드는 이 Statement로 삭제된 행의 개수를 반환합니다.
- 매개 변수:
없습니다.
- 반환:
삭제된 행의 개수를 나타내는 Number 형식의 값.
- 오류:
문이 아직 실행되지 않은 경우 JavaScript 오류를 발생시킵니다.
- getNumRowsInserted()¶
이 메서드는 이 Statement로 삽입된 행의 개수를 반환합니다.
- 매개 변수:
없습니다.
- 반환:
삽입된 행의 개수를 나타내는 Number 형식의 값.
- 오류:
문이 아직 실행되지 않은 경우 JavaScript 오류를 발생시킵니다.
- getNumRowsUpdated()¶
이 메서드는 이 Statement로 업데이트된 행의 개수를 반환합니다.
- 매개 변수:
없습니다.
- 반환:
업데이트된 행의 개수를 나타내는 Number 형식의 값.
- 오류:
문이 아직 실행되지 않은 경우 JavaScript 오류를 발생시킵니다.
- getRowCount()¶
이 메서드는 실행된 쿼리에 대한 결과 세트의 행 개수를 반환합니다. 쿼리가 아직 실행되지 않은 경우 이 메서드는 Error를 발생시킵니다.
- 매개 변수:
없습니다.
- 반환:
행 개수.
- 오류:
문이 아직 실행되지 않은 경우 JavaScript Error를 발생시킵니다(따라서 반환된 행의 수를 결정할 수 없음).
- 예:
var row_count = statement.getRowCount();
- getQueryId()¶
이 메서드는 가장 최근에 실행된 쿼리의 UUID를 반환합니다.
- 매개 변수:
없습니다.
- 반환:
쿼리 ID인 UUID를 포함하는 문자열.
- 오류:
이 문으로 실행한 쿼리가 아직 없는 경우 이 메서드는 “문이 아직 실행되지 않았습니다.” 오류를 발생시킵니다.
- 예:
var queryId = statement.getQueryId();
- getSqlText()¶
이 메서드는
Statement
오브젝트에서 준비된 쿼리의 텍스트를 반환합니다.- 매개 변수:
없습니다.
- 반환:
준비된 쿼리 텍스트의 문자열.
- 오류:
없습니다.
- 예:
var queryText = statement.getSqlText();
- isColumnNullable(colIdx)¶
이 메서드는 지정된 열에서 SQL NULL 값을 허용하는지 여부를 반환합니다.
- 매개 변수:
열의 인덱스(
0
이 아니라1
부터 시작함).- 반환:
열에서 SQL NULL 값을 허용하는 경우
true
, 그렇지 않으면false
.- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
Statement
가 아직 실행되지 않은 경우.지정된 인덱스를 가진 열이 없는 경우.
- isColumnText(colIdx)¶
이 메서드는 열 데이터 타입이 다음 SQL 텍스트 데이터 타입 중 하나인 경우 true를 반환합니다.
CHAR 또는 CHAR(N)은 물론이고 그 동의어인 CHARACTER 및 CHARACTER(N)
VARCHAR 또는 VARCHAR(N)
STRING
TEXT
그렇지 않으면 false를 반환합니다.
- 매개 변수:
열의 인덱스(
0
이 아니라1
부터 시작함).- 반환:
열 데이터 타입이 SQL 텍스트 데이터 타입 중 하나인 경우
true
, 다른 모든 데이터 타입인 경우false
.- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
Statement
가 아직 실행되지 않은 경우.지정된 인덱스를 가진 열이 없는 경우.
참고
이 API는 열의 데이터 타입을 결정하는 여러 가지 방법을 제공합니다. 첫 번째 메서드는 위에 자세히 설명되어 있습니다. 나머지 메서드의 매개 변수와 오류도 똑같지만, 유일한 차이점은 반환 값입니다.
- isColumnArray(colIdx)¶
- 반환:
열 데이터 타입이 ARRAY(반정형 데이터에 대해)인 경우
true
, 다른 모든 데이터 타입인 경우false
.
- isColumnBinary(colIdx)¶
- 반환:
열 데이터 타입이 BINARY 또는 VARBINARY인 경우
true
, 다른 모든 데이터 타입인 경우false
.
- isColumnBoolean(colIdx)¶
- 반환:
열 데이터 타입이 BOOLEAN인 경우
true
, 다른 모든 데이터 타입인 경우false
.
- isColumnDate(colIdx)¶
- 반환:
열 데이터 타입이 DATE인 경우
true
, 다른 모든 데이터 타입인 경우false
.
- isColumnNumber(colIdx)¶
- 반환:
열 데이터 타입이 SQL 숫자 형식(NUMBER, NUMERIC, DECIMAL, INT, INTEGER, BIGINT, SMALLINT, TINYINT, BYTEINT, FLOAT, FLOAT4, FLOAT8, DOUBLE, DOUBLE PRECISION 또는 REAL) 중 하나인 경우
true
, 다른 모든 데이터 타입인 경우false
.
- isColumnObject(colIdx)¶
- 반환:
열 데이터 타입이 OBJECT(반정형 데이터에 대해)인 경우
true
, 다른 모든 데이터 타입인 경우false
.
- isColumnTime(colIdx)¶
- 반환:
열 데이터 타입이 TIME 또는 DATETIME인 경우
true
, 다른 모든 데이터 타입인 경우false
.
- isColumnTimestamp(colIdx)¶
- 반환:
열 데이터 타입이 SQL 타임스탬프 형식(TIMESTAMP, TIMESTAMP_LTZ, TIMESTAMP_NTZ 또는 TIMESTAMP_TZ) 중 하나인 경우
true
, 다른 날짜 및 시간 데이터 타입(DATE, TIME 또는 DATETIME)을 포함한 다른 모든 데이터 타입인 경우false
.
- isColumnVariant(colIdx)¶
- 반환:
열 데이터 타입이 VARIANT(반정형 데이터에 대해)인 경우
true
, 다른 모든 데이터 타입인 경우false
.
오브젝트: ResultSet
¶
이 오브젝트는 쿼리에서 반환된 결과를 포함합니다. 이런 결과는 각각 하나 이상의 열을 포함하는 0개 또는 그 이상의 행으로 구성된 세트로 처리됩니다. “세트”라는 용어는 여기에서 수학적 의미로 사용되는 것이 아닙니다. 수학에서는 세트가 순서가 지정되지 않는 반면, ResultSet
는 순서가 있습니다.
ResultSet
는 어떤 면에서 SQL 커서의 개념과 유사합니다. 예를 들어, 커서에서 한 번에 한 행을 볼 수 있는 것과 마찬가지로, ResultSet
에서도 한 번에 한 행을 볼 수 있습니다.
일반적으로, ResultSet
를 불러온 후 다음 작업을 반복하여 이 오브젝트를 반복합니다.
next()
를 호출하여 다음 행을 가져옵니다.getColumnValue()
와 같은 메서드를 호출하여 현재 행에서 데이터를 불러옵니다.
ResultSet
에 있는 데이터에 대해 충분히 알지 못하는 경우(예: 각 열의 데이터 타입을 모르는 경우), 데이터에 대한 정보를 제공하는 다른 메서드를 호출할 수 있습니다.
ResultSet
오브젝트의 메서드 중 일부는 Statement
오브젝트의 메서드와 유사합니다. 예를 들어 두 오브젝트 모두 getColumnSqlType(colIdx)
메서드가 있습니다.
상수¶
없습니다.
메서드¶
- getColumnCount()
이 메서드는 이 ResultSet에 있는 열의 개수를 반환합니다.
- 매개 변수:
없습니다.
- 반환:
열의 개수를 나타내는 Number 형식의 값.
- 오류:
없습니다.
- getColumnSqlType(colIdx|colName)
이 메서드는 지정된 열의 SQL 데이터 타입을 반환합니다.
- 매개 변수:
열의 인덱스 번호(
0
이 아니라1
부터 시작함) 또는 열 이름. (다양한 데이터 타입을 매개 변수로 허용하도록 메서드가 오버로드됩니다.)테이블 생성 시 열 이름에 큰따옴표를 사용하지 않은 경우(즉, 열 이름의 대/소문자가 유지됨) 열 이름은 모두 대문자여야 합니다.
- 반환:
열의 SQL 데이터 타입.
- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
ResultSet
가 비어 있거나next()
가 아직 호출되지 않은 경우.지정된 인덱스 또는 이름을 가진 열이 없는 경우.
- getColumnValue(colIdx|colName)¶
이 메서드는 현재 행(즉,
next()
로 가장 최근에 불러온 행)의 열 값을 반환합니다.- 매개 변수:
열의 인덱스 번호(
0
이 아니라1
부터 시작함) 또는 열 이름. (다양한 데이터 타입을 매개 변수로 허용하도록 메서드가 오버로드됩니다.)테이블 생성 시 열 이름에 큰따옴표를 사용하지 않은 경우(즉, 열 이름의 대/소문자가 유지됨) 열 이름은 모두 대문자여야 합니다.
- 반환:
지정된 열의 값.
- 오류:
다음과 같은 경우 JavaScript 오류를 발생시킵니다.
ResultSet
가 비어 있거나next()
가 아직 호출되지 않은 경우.지정된 인덱스 또는 이름을 가진 열이 없는 경우.
- 예:
데이터베이스의 행을 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 = []; }
또한, 열의 값을
ResultSet
오브젝트의 속성(예: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 = []; }
참고
CREATE TABLE 문에서 큰따옴표로 열 이름을 구분하지 않은 경우 열 이름은 JavaScript 코드에서 모두 대문자여야 합니다.
- getColumnValueAsString(colIdx|colName)¶
이 메서드는 열 값을 문자열로 반환하므로, 테이블의 원래 데이터 타입과 관계없이 열 값이 필요할 때 유용합니다.
이 메서드는 문자열 값을 반환한다는 점을 제외하면
getColumnValue()
메서드와 같습니다.자세한 내용은
getColumnValue()
섹션을 참조하십시오.
- getNumRowsAffected()
이 메서드는 이 ResultSet를 생성한 Statement의 영향을 받는(예: 삽입/업데이트/삭제된) 행의 개수를 반환합니다.
두 가지 이상의 변경 유형이 적용되는 경우(예: MERGE 작업이 어떤 행은 삽입하고 다른 행은 업데이트한 경우), 이 수는 모든 변경 사항의 영향을 받는 행의 총수입니다.
- 매개 변수:
없습니다.
- 반환:
영향을 받는 행의 개수를 나타내는 Number 형식의 값.
- 오류:
없습니다.
- getQueryId()
이 메서드는 가장 최근에 실행된 쿼리의 UUID를 반환합니다.
- 매개 변수:
없습니다.
- 반환:
쿼리 ID인 UUID를 포함하는 문자열.
- 예:
var queryId = resultSet.getQueryId();
- getRowCount()
이 메서드는 이 ResultSet에 있는 행의 개수를 반환합니다. (이는 아직 사용되지 않은 행의 수가 아니라, 행의 총수입니다.)
- 매개 변수:
없습니다.
- 반환:
행의 개수를 나타내는 Number 형식의 값.
- 오류:
없습니다.
- next()¶
이 메서드는
ResultSet
에서 그다음 행을 가져와서 액세스할 수 있게 합니다.이 메서드는 새 데이터 행을 반환하지 않습니다. 대신에, 데이터를 불러오기 위해
ResultSet.getColumnValue()
와 같은 메서드를 호출할 수 있도록 행을 사용할 수 있게 합니다.첫 번째 행을 포함하여 결과 세트의 각 행에 대해
next()
를 호출해야 합니다.- 매개 변수:
없습니다.
- 반환:
행을 불러온 경우
true
, 불러올 행이 더 이상 없는 경우false
.따라서
next()
가 false를 반환할 때까지ResultSet
를 반복할 수 있습니다.- 오류:
없습니다.
오브젝트: SfDate
¶
JavaScript에는 Snowflake SQL 데이터 타입 TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ에 해당하는 네이티브 데이터 타입이 없습니다. 데이터베이스에서 TIMESTAMP 형식의 값을 불러와 JavaScript 변수로 저장하고 싶은 경우(예: ResultSet에서 이 값을 JavaScript 변수에 복사), Snowflake 정의 JavaScript 데이터 타입 SfDate
를 사용하십시오. SfDate
(“SnowFlake Date”) 데이터 타입은 JavaScript 날짜 데이터 타입의 확장입니다. SfDate
에는 아래에서 설명하는 추가 메서드가 있습니다.
상수¶
없습니다.
메서드¶
달리 지정하지 않는 한, 아래의 예에서는 UTC 타임존으로 가정합니다.
- getEpochSeconds()¶
이 메서드는 “epoch(시대)”의 시작(1970년 1월 1일 자정) 이후로 경과된 시간(초)을 반환합니다.
- 매개 변수:
없습니다.
- 반환:
1970년 1월 1일 자정과 변수에 저장된 타임스탬프 사이의 시간(초).
- 예:
저장 프로시저를 만듭니다.
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(); $$ ;
프로시저에 다른 타임스탬프를 전달하고 각 타임스탬프에 대해 epoch 이후 경과된 시간(초)을 불러옵니다.
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()¶
이 메서드는 오브젝트의 나노초 필드 값을 반환합니다. 이 값은 epoch 시작 이후의 나노초가 아니라 소수 초일 뿐입니다. 따라서 이 값은 항상 0에서 999999999 사이의 값입니다.
- 매개 변수:
없습니다.
- 반환:
나노초 수.
- 예:
저장 프로시저를 만듭니다.
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');
프로시저에 다른 타임스탬프를 전달하고 각각에서 나노초 수를 불러옵니다.
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()¶
이 메서드는 데이터 타입의 정밀도, 즉 소수점 이하 자릿수를 반환합니다. 예를 들어, TIMESTAMP_NTZ(3)의 정밀도는 3(밀리초)입니다. TIMESTAMP_NTZ(0)의 정밀도는 0(소수 초 없음)입니다. TIMSTAMP_NTZ의 정밀도는 9(나노초)입니다.
최소값은 0이고 최대값은 9입니다(정밀도가 1나노초까지임). 기본 정밀도는 9입니다.
- 매개 변수:
없습니다.
- 반환:
소수점 이하 자릿수(소수 초 필드의 자릿수).
- 예:
저장 프로시저를 만듭니다.
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');
이 예에서는 타임스탬프가 TIMESTAMP_NTZ(0)으로 정의되므로, 정밀도는 0입니다.
CALL test_get_scale('1970-01-01 00:00:00', '0'); +----------------+ | TEST_GET_SCALE | |----------------| | 0 | +----------------+
이 예에서는 타임스탬프가 TIMESTAMP_NTZ(2)로 정의되므로, 정밀도는 2입니다.
CALL test_get_scale('1970-01-01 00:00:01.123', '2'); +----------------+ | TEST_GET_SCALE | |----------------| | 2 | +----------------+
이 예에서는 타임스탬프가 TIMESTAMP_NTZ로 정의되므로, 정밀도는 기본값인 9입니다.
CALL test_get_scale('1971-01-01 00:00:00.000123456', '9'); +----------------+ | TEST_GET_SCALE | |----------------| | 9 | +----------------+
- getTimezone()¶
이 메서드는 타임존을 UTC 이전 또는 이후의 시간(분)으로 반환합니다.
- 매개 변수:
없습니다.
- 반환:
UTC 이전 또는 이후의 시간(분)으로 나타낸 타임존.
- 예:
저장 프로시저를 만듭니다.
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(); $$ ;
이 예에서는 타임존이 UTC보다 8시간(480분) 뒤의 시간입니다.
CALL test_get_timezone('1970-01-01 00:00:01-08:00'); +-------------------+ | TEST_GET_TIMEZONE | |-------------------| | -480 | +-------------------+
이 예에서는 타임존이 UTC보다 11시간(660분) 앞의 시간입니다.
CALL test_get_timezone('1971-01-01 00:00:00.000123456+11:00'); +-------------------+ | TEST_GET_TIMEZONE | |-------------------| | 660 | +-------------------+
- toString()¶
- 매개 변수:
없습니다.
- 반환:
이 메서드는 타임스탬프의 문자열 표현을 반환합니다.
- 예:
다음은
SfDate
를 만들고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 (Coordinated Universal Time)" | +------------------------------------------------------------------+