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

저장 프로시저 작업하기 에 더 광범위한 코드 예가 제공됩니다.

상수

없습니다.

메서드

addEvent(name[, attributes])

추적을 위한 이벤트를 추가합니다.

JavaScript에서 추적 이벤트에 대한 자세한 내용은 JavaScript에서 추적 이벤트 내보내기 섹션을 참조하십시오.

매개 변수

name

추가할 이벤트의 이름입니다.

attributes

이벤트와 연결할 특성을 지정하는 오브젝트입니다.

오류

다음과 같은 경우 JavaScript 오류를 발생시킵니다.

  • name 은 문자열이 아닙니다.

  • 0개 또는 3개 이상의 인자가 있습니다.

scorepass 특성이 있는 my_event 이벤트를 추가합니다.

snowflake.addEvent('my_event', {'score': 89, 'pass': true});
Copy
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);"}
   );
Copy

다음 예에서는 값을 바인딩합니다.

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

추가 예제를 포함하여 바인딩에 대한 자세한 내용은 변수 바인딩하기 를 참조하십시오.

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");
Copy
setSpanAttribute(key, value)

이벤트를 추적할 때 현재 범위의 특성을 설정합니다.

JavaScript에서 추적 이벤트에 대한 자세한 내용은 JavaScript에서 추적 이벤트 내보내기 섹션을 참조하십시오.

매개 변수

key

특성의 키입니다.

value

특성의 값입니다.

오류

다음과 같은 경우 JavaScript 오류를 발생시킵니다.

  • 두 인자가 지정되지 않았습니다.

  • key 는 문자열이 아닙니다.

키가 example.boolean 이고 값이 true 인 특성을 설정합니다.

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

오브젝트: 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();
Copy
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.
    );
Copy

이 메서드는 모든 데이터 타입에 대해 호출할 수 있지만, 숫자 데이터 타입과 함께 사용하기 위한 메서드입니다.

매개 변수

소수 자릿수가 필요한 열의 인덱스(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();
Copy
getQueryId()

이 메서드는 가장 최근에 실행된 쿼리의 UUID를 반환합니다.

매개 변수

없습니다.

반환

쿼리 ID인 UUID를 포함하는 문자열.

오류

이 문으로 실행한 쿼리가 아직 없는 경우 이 메서드는 《문이 아직 실행되지 않았습니다.》 오류를 발생시킵니다.

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

이 메서드는 Statement 오브젝트에서 준비된 쿼리의 텍스트를 반환합니다.

매개 변수

없습니다.

반환

준비된 쿼리 텍스트의 문자열.

오류

없습니다.

var queryText = statement.getSqlText();
Copy
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 = [];
    }
Copy

또한, 열의 값을 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 = [];
    }
Copy

참고

CREATE TABLE 문에서 큰따옴표로 열 이름을 구분하지 않은 경우 열 이름은 JavaScript 코드에서 모두 대문자여야 합니다.

getColumnValueAsString(colIdx|colName)

이 메서드는 열 값을 문자열로 반환하므로, 테이블의 원래 데이터 타입과 관계없이 열 값이 필요할 때 유용합니다.

이 메서드는 문자열 값을 반환한다는 점을 제외하면 getColumnValue() 메서드와 같습니다.

자세한 내용은 getColumnValue() 섹션을 참조하십시오.

getNumRowsAffected()

이 메서드는 이 ResultSet를 생성한 Statement의 영향을 받는(예: 삽입/업데이트/삭제된) 행의 개수를 반환합니다.

두 가지 이상의 변경 유형이 적용되는 경우(예: MERGE 작업이 어떤 행은 삽입하고 다른 행은 업데이트한 경우), 이 수는 모든 변경 사항의 영향을 받는 행의 총수입니다.

매개 변수

없습니다.

반환

영향을 받는 행의 개수를 나타내는 Number 형식의 값.

오류

없습니다.

getQueryId()

이 메서드는 가장 최근에 실행된 쿼리의 UUID를 반환합니다.

매개 변수

없습니다.

반환

쿼리 ID인 UUID를 포함하는 문자열.

var queryId = resultSet.getQueryId();
Copy
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();
    $$
    ;
Copy

프로시저에 다른 타임스탬프를 전달하고 각 타임스탬프에 대해 epoch 이후 경과된 시간(초)을 불러옵니다.

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

이 메서드는 오브젝트의 나노초 필드 값을 반환합니다. 이 값은 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');
Copy

프로시저에 다른 타임스탬프를 전달하고 각각에서 나노초 수를 불러옵니다.

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

이 메서드는 데이터 타입의 정밀도, 즉 소수점 이하 자릿수를 반환합니다. 예를 들어, 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');
Copy

이 예에서는 타임스탬프가 TIMESTAMP_NTZ(0)으로 정의되므로, 정밀도는 0입니다.

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

이 예에서는 타임스탬프가 TIMESTAMP_NTZ(2)로 정의되므로, 정밀도는 2입니다.

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

이 예에서는 타임스탬프가 TIMESTAMP_NTZ로 정의되므로, 정밀도는 기본값인 9입니다.

CALL test_get_scale('1971-01-01 00:00:00.000123456', '9');
+----------------+
| TEST_GET_SCALE |
|----------------|
|              9 |
+----------------+
Copy
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();
    $$
    ;
Copy

이 예에서는 타임존이 UTC보다 8시간(480분) 뒤의 시간입니다.

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

이 예에서는 타임존이 UTC보다 11시간(660분) 앞의 시간입니다.

CALL test_get_timezone('1971-01-01 00:00:00.000123456+11:00');
+-------------------+
| TEST_GET_TIMEZONE |
|-------------------|
|               660 |
+-------------------+
Copy
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();
    $$
    ;
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