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