SnowConvert AI - Oracle - PL/SQL를 Javascript로 변환¶
PL/SQL 문을 snowflake JavaScript로 변환하기 위한 변환 참조입니다.
컬렉션 & 레코드¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
레코드¶
참고
사용자는 레코드 변수 선언에도 관심이 있을 수 있습니다
Oracle¶
Snowflake¶
경고
“SELECT INTO 레코드”에 대한 변환이 진행 중입니다.
Known Issues¶
문제가 발견되지 않았습니다.
조건부 컴파일¶
설명¶
조건의 진리값을 기반으로 조건부 컴파일을 제공합니다.
Oracle 조건부 컴파일 IF 에 대한 자세한 내용은 여기 에서 확인할 수 있습니다.
샘플 소스 패턴¶
가능한 IF 변형¶
Oracle¶
Snowflake Scripting¶
알려진 문제¶
조건부 컴파일 변환은 현재 지원되지 않습니다.
관련 EWIs¶
SSC-EWI-0073: 보류 중 함수 동등성 검토.
Control 문¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
IF, ELSIF 및 ELSE 문¶
Oracle¶
Snowflake¶
루프¶
Oracle¶
Snowflake¶
While 문¶
Oracle¶
Snowflake¶
관련 EWIs¶
SSC-EWI-0053: 오브젝트가 작동하지 않을 수 있습니다.
선언¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
변수 선언 및 할당¶
Oracle¶
Snowflake¶
Record 변수 선언¶
참고
레코드 변환 섹션에 관심이 있을 수도 있습니다.
Oracle¶
Snowflake¶
Rowtype Record 변수 선언¶
Oracle¶
Snowflake¶
상수 선언¶
Oracle¶
Snowflake¶
커서 선언 및 정의¶
Oracle¶
참고
커서 헬퍼에 관심이 있을 수도 있습니다.
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
관련 EWIs 없음.
SSC-EWI-0022: 기본적으로 이 문에서 하나 이상의 식별자는 매개 변수로 간주됩니다.
SSC-EWI-0026: The variable may require a cast to date, time or timestamp.
식 및 연산자¶
식¶
Concatenation 연산자¶
참고
Concat 헬퍼에 관심이 있을 수도 있습니다.
Oracle 연결은 JavaScript 에서 템플릿 리터럴 을 사용하여 수행됩니다. 또한 _Concat Helper_를 사용하여 null이 있는 연결을 올바르게 처리합니다.
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
논리 연산자¶
Oracle¶
Snowflake¶
참고
IS NULL 헬퍼.에 관심이 있을 수도 있습니다.
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
Comparison 연산자¶
설명서 작성 진행 중.
IS [NOT] NULL¶
참고
IS NULL 헬퍼에 관심이 있을 수도 있습니다.
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
Like 연산자¶
참고
Like 연산자 헬퍼에 관심이 있을 수도 있습니다.
LIKE 작업이 있는 경우 도우미 함수가 대신 호출됩니다.
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
Between 연산자¶
참고
Between 연산자 헬퍼에 관심이 있을 수도 있습니다.
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
IN 연산자¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
부울 식¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
함수 식¶
프로시저 내부의 함수 표현식의 경우, 해당 표현식은 Snowflake에서 해당 함수 또는 식으로 변환됩니다. 이러한 함수 호출은 변환된 값에 따라 CALL 또는 SELECT 를 사용하여 EXEC 으로 전달됩니다.
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
함수의 변환에 대한 자세한 내용은 여기를 확인하세요.
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
관련 EWIs 없음.
SSC-EWI-OR0013: NLS 매개 변수는 지원되지 않습니다.
SSC-FDM-OR0042: 타임스탬프로 변환된 날짜 유형의 동작이 다릅니다.
사용자 정의 함수¶
일반 설명¶
대부분의 Oracle UDFs 및 UDFs 패키지 내 프로시저는 기능적 동등성을 유지하기 위해 Snowflake UDFs 가 DML (데이터 조작 언어) 문을 실행하는 데 일부 제한이 있기 때문에, Snowflake 저장 프로시저로 변환하고 있습니다.
변환¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
함수 생성하기¶
Oracle¶
Snowflake¶
패키지 내부 함수¶
Oracle¶
Snowflake¶
반환 데이터 타입 매핑¶
Oracle PL SQL 유형 |
Snowflake의 해당 기능 |
|---|---|
NUMBER |
FLOAT |
LONG |
VARCHAR |
VARCHAR2 |
STRING |
BLOB |
BINARY |
BFILE |
BINARY |
호출¶
내부 쿼리¶
Calls of functions that were transformed to procedures inside queries are converted into an empty Snowflake JavaScript UDF. This Snowflake UDF is generated in the STUB_UDF.sql file inside the UDF Helpers directory.
Oracle¶
Snowflake¶
다른 함수 또는 저장 프로시저 내부에서¶
프로시저로 변환되는 함수는 EXEC Snowflake 헬퍼를 사용하여 호출됩니다.
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
다양한 사례 및 제한 사항¶
DMLs 포함 함수¶
이러한 함수는 Oracle의 쿼리에서 실행할 수 없으므로 Snowflake 프로시저로 변환할 때 사용이 제한되지 않습니다.
Oracle¶
Snowflake¶
1개의 SELECT INTO 만 있는 함수¶
이러한 함수는 select에서 INTO 부분을 제거하여 Snowflake SQL 함수로 변환됩니다.
Oracle¶
Snowflake¶
논리만 있는 함수¶
UDFs 문을 사용하지 않는 SQL 문은 Snowflake JavaScript UDFs 로 변환됩니다.
참고
SQL 기본 제공 함수가 논리에 포함되면 사용자 정의 함수가 Snowflake 프로시저로 변환됩니다. 기본 제공 함수에 대한 변환은 향후 JavaScript 에 상응하는 변환이 제공될 계획입니다.
기본 제공 함수의 예: UPPER(), TRIM(), ABS().
Oracle¶
Snowflake¶
SQL 문이 2개 이상인 함수¶
경고
프로시저로 변환된 UDFs 는 쿼리에서 호출할 수 없습니다.
Oracle¶
Snowflake¶
논리 및 기본 제공 SQL 함수만 있는 함수¶
참고
This transformation is planned to be delivered in the future, currently all functions are being transformed to stored procedures.
Oracle¶
Snowflake¶
RETURN CASE¶
변환은 CASE가 변수를 할당하는 데 사용되는 경우 동일한 변환입니다.
Oracle¶
Snowflake¶
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
SSC-EWI-0022: 기본적으로 이 문에서 하나 이상의 식별자는 매개 변수로 간주됩니다.
SSC-EWI-0073: 보류 중 함수 동등성 검토.
SSC-FDM-0029: 사용자 정의 함수가 Snowflake 프로시저로 변환되었습니다.
패키지¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
패키지 선언¶
이 섹션에서는 Oracle 패키지 선언 멤버와 Snowflake 문의 동등성을 보여줍니다.
패키지 변환 옵션¶
패키지를 마이그레이션하는 두 가지 옵션이 있으며, 각 옵션은 패키지 내부의 오브젝트 이름 지정에 직접적인 영향을 미칩니다. UI에서 이 모드를 변경하는 방법은 여기를 확인하세요.
Oracle에 다음 시나리오가 있다고 가정해 보겠습니다.
MY_PACKAGE라는 패키지가 있습니다.패키지 내부의 프로시저는
MY_PROCEDURE입니다.
옵션 1(새 스키마 사용)¶
이 옵션을 사용하면 패키지가 새로운 스키마로 변환됩니다. 함수 및 프로시저와 같은 패키지 요소는 새 스키마 내에서 생성됩니다. 패키지가 이미 스키마 안에 있는 경우 패키지 이름은 밑줄로 스키마 이름과 결합됩니다.
이 옵션이 패키지를 변환할 때 기본 옵션입니다.
결과:
A schema will be created with the name
MY_PACKAGE.프로시저의 적격 이름은
MY_PACKAGE.MY_PROCEDURE로 업데이트됩니다.If the package is inside a schema then the procedure will be updated to
MY_SCHEMA_MY_PACKAGE.MY_PROCEDURE.
옵션 2¶
이 옵션을 사용하면 패키지 요소의 이름이 밑줄로 패키지 이름과 결합됩니다. 새 스키마는 생성되지 않습니다.
결과:
프로시저의 이름은
MY_PACKAGE_MY_PROCEDURE로 업데이트됩니다.If the package is inside a schema then the procedure will be updated to
MY_SCHEMA.MY_PACKAGE_MY_PROCEDURE.
패키지 생성하기¶
CREATE PACKAGE 문은 CREATE SCHEMA 문으로 변환됩니다. 패키지 내부의 모든 멤버는 패키지 외부로 변환됩니다.
Oracle¶
옵션 1을 사용한 변환(새 스키마 사용)¶
옵션 2를 사용한 변환¶
이 옵션을 사용하면 스키마가 생성되지 않고 내부 요소만 유지되지만 이름이 변경됩니다.
프로시저 및 함수 선언¶
프로시저 및 함수 선언은 Snowflake로 변환하는 데 필요하지 않습니다. 기존 프로시저 또는 함수 선언은 설명이 생략됩니다.
Oracle¶
옵션 1을 사용한 변환(새 스키마 사용)¶
참고
옵션 1의 경우 패키지의 PROCEDURE 정의는 Snowflake에서 필수가 아니므로 제거됩니다.
변수 선언¶
참고
변수 헬퍼에 관심이 있을 수도 있습니다.
Oracle 패키지 변수는 Snowflake 세션 변수로 변환됩니다. 값에 접두사를 추가하여 저장 프로시저 내에서 어떤 유형인지 알 수 있습니다. 값이 null이어야 하는 경우 “~”가 추가됩니다. 따라서 다른 변수에 종속된 변수에는 SUBSTR 및 CAST 가 필요합니다.
데이터 타입 및 코드 매핑¶
데이터 타입 또는 값 |
코드 |
|---|---|
숫자형 타입 |
# |
날짜/시간 유형 |
& |
문자열 유형 |
$ |
NULL 값 |
~ |
변수의 변환은 변환 옵션에 관계없이 항상 동일합니다.
Oracle¶
Snowflake¶
상수 선언¶
상수 선언은 상수를 사용하는 프로시저 또는 함수 내에서 선언됩니다. 기존 패키지 상수 선언은 설명이 생략되고 경고가 추가됩니다.
Oracle¶
옵션 1을 사용한 변환
참고
패키지의 PROCEDURE 정의는 Snowflake에서 필수가 아니므로 제거되었습니다.
기타 패키지 멤버¶
커서, 예외 및 사용자 정의 유형과 같은 다른 패키지 멤버에 대한 변환은 아직 진행 중입니다.
Oracle¶
옵션 1을 사용한 변환¶
패키지 본문 정의¶
이 섹션에서는 Oracle 패키지 본문 정의 멤버와 Snowflake 문의 동등성을 보여줍니다.
패키지 본문 생성하기¶
패키지 본문 내부의 요소는 패키지에서 추출됩니다. 패키지 본문이 사라지므로 변환된 코드에서 패키지 본문 생성하기 문이 제거됩니다.
프로시저 정의¶
패키지 내의 저장 프로시저는 PL/SQL 변환 참조에 정의된 동일한 변환을 사용합니다.
Oracle¶
옵션 1을 사용한 변환¶
옵션 2를 사용한 변환¶
함수 정의¶
패키지 본문 내의 함수는 Snowflake 저장 프로시저로 변환됩니다.
Oracle¶
옵션 1을 사용한 변환¶
옵션 2를 사용한 변환¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
기타 패키지 본문 멤버¶
패키지 선언의 “기타 패키지 멤버” 섹션을 참조하십시오.
패키지 멤버 사용¶
패키지 내 프로시저 호출¶
프로시저가 패키지 안에 있고 패키지가 스키마 안에 있는 경우 호출의 이름이 변경됩니다.
Oracle¶
옵션 1을 사용한 변환¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
옵션 2를 사용한 변환¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
이 옵션을 사용하면 프로시저 선언의 이름 변경에 따라 프로시저 호출의 이름이 변경됩니다. 스키마 이름은 프로시저 이름과 점으로 구분됩니다.
Snowflake¶
프로시저 내부의 패키지 변수¶
참고
패키지 변수는 세션 변수로 변환됩니다. 이러한 변수는 “패키지 변수 헬퍼”를 통해 사용할 수 있습니다.
참고
이 샘플에서는 패키지 변수 선언 섹션에 선언된 변수를 사용합니다.
Oracle¶
Snowflake¶
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
SSC-EWI-0053: 오브젝트가 작동하지 않을 수 있습니다.
SSC-EWI-OR0049: 상태 저장 패키지의 패키지 상수는 아직 지원되지 않습니다.
프로시저¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
예 1: 기본 프로시저 변환
Oracle¶
Snowflake¶
예제 2: 기본 문을 사용한 프로시저 변환: 선언, 할당, 커서 선언, FOR 커서, 열기, LOOP, CLOSE, IF,
Oracle¶
Snowflake¶
다른 프로시저 내부의 프로시저 호출¶
Oracle¶
Snowflake¶
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
SSC-EWI-0022: 기본적으로 이 문에서 하나 이상의 식별자는 매개 변수로 간주됩니다.
SSC-FDM-OR0012: COMMIT 및 ROLLBACK 문이 의도한 대로 수행되려면 적절한 설정이 필요합니다.
SQL 언어 요소¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
커서 FOR LOOP¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
OPEN, FETCH 및 CLOSE 문¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
경고
Transformation for the following lines corresponds to custom types, which are work in progress:
현재 다음 문이 전송되고 있지만 클래스는 아직 생성되지 않았습니다. 향후 지원되지 않는 사용자 정의 유형의 모든 사용에는 경고가 적용될 예정입니다.
SQL 암시적 커서¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
EXIT¶
경고
레이블에 대한 변환은 현재 진행 중입니다.
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
즉시 실행¶
참고
EXEC 헬퍼에 관심이 있을 수도 있습니다.
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
경고
“RETURNING INTO” 절은 실행된 문에 대한 특별한 분석이 필요하므로 향후 변환이 제공될 계획입니다.
경고
Transformation for the following line corresponds to collection types, which is work in progress:
현재 다음 문이 전송되고 있지만 클래스는 아직 생성되지 않았습니다. 향후 지원되지 않는 사용자 정의 유형의 모든 사용에는 경고가 적용될 예정입니다.
또한 BULK COLLECT 를 sals 변수에 연결하는 다음 EXECUTE IMMEDIATE 작업도 진행 중입니다.
오류 및 예외 처리¶
참고
상승 헬퍼에 관심이 있을 수도 있습니다.
헬퍼 사용량 늘리기¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
OTHERS 처리기가 없는 경우, SnowConvert AI는 원본 오류 오브젝트를 발생시키는 스위치에서 “기본” 케이스를 사용합니다.
커밋¶
참고
EXEC 헬퍼에 관심이 있을 수도 있습니다.
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
CASE¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
변수 할당의 CASE¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
외부 C 또는 Java 프로그램 호출¶
Oracle¶
Snowflake¶
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
SSC-EWI-0022: 특정 문에 있는 하나 이상의 식별자는 기본적으로 매개 변수로 간주됩니다.
SSC-EWI-0053: 오브젝트가 작동하지 않을 수 있습니다.
SSC-EWI-0073: 보류 중 함수 동등성 검토.
SSC-EWI-OR0052: 예외 선언은 상승 함수에 의해 처리됩니다.
SSC-EWI-OR0072: 프로시저 멤버는 지원되지 않습니다.
SSC-EWI-OR0075: Current of 절은 Snowflake에서 지원되지 않습니다.
SSC-EWI-OR0104: 사용할 수 없는 컬렉션 변수입니다.
SSC-FDM-OR0007: Snowflake는 오브젝트의 버전 관리를 지원하지 않습니다. 개발자는 코드 버전 관리를 위한 대체 접근 방식을 고려해야 합니다.
SSC-FDM-OR0009: SQL IMPLICIT CURSOR VALUES MAY DIFFER.
SSC-FDM-OR0011: “스택에 추가” 옵션이 지원되지 않으므로 부울 인자가 제거되었습니다.
SSC-FDM-OR0012: COMMIT 및 ROLLBACK 문이 의도한 대로 수행되려면 적절한 설정이 필요합니다.
DDL - DML 문¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
참고
모든 문은 EXEC 헬퍼를 사용합니다.
SELECT¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
SELECT INTO¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
INSERT 및 INSERT INTOSELECT¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
DELETE¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
UPDATE¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
MERGE¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
SSC-EWI-0022: 특정 문에 있는 하나 이상의 식별자는 기본적으로 매개 변수로 간주됩니다.
동의어¶
PL/SQL 블록 내에서 사용되는 동의어는 참조된 오브젝트로 변경되며 필요한 경우 스키마가 추가됩니다.
암시적 스키마 추가됨¶
프로시저 또는 함수가 스키마 안에 있고 동의어가 해당 스키마 안에 있지만 스키마 없이 사용되는 경우 변환된 코드에 스키마가 추가됩니다.
Oracle¶
Snowflake¶
참조된 오브젝트의 스키마가 추가되었습니다¶
동의어가 특정 스키마에 있는 오브젝트를 참조하는 경우 스키마 이름이 참조된 오브젝트에 추가됩니다.
Oracle¶
Snowflake¶
관련 EWIs¶
SSC-FDM-OR0005: Snowflake에서는 동의어가 지원되지 않지만, 이 동의어에 대한 참조가 원래 오브젝트 이름으로 변경되었습니다.
SSC-FDM-OR0042: 타임스탬프로 변환된 날짜 유형의 동작이 다릅니다.
트리거¶
경고
트리거는 Snowflake에서 지원되지 않으며 자동으로 마이그레이션되지 않습니다.
현재 Snowflake는 트리거에 대한 직접적인 메커니즘을 제공하지 않지만 일부 Snowflake 기능을 사용하여 유사한 결과를 얻을 수 있습니다.
트리거를 분석하고 목적에 따라 트리거를 분류하는 것이 좋습니다.
감사 트리거: 이 트리거의 의도는 정보를 캡처하고 일부 테이블에서 수행된 변경 사항을 다른 테이블에 기록하는 것입니다.
초기화 트리거: 이 트리거의 의도는 새 레코드에 몇 가지 기본값을 추가하는 것입니다. 일반적으로 삽입 트리거 전후에 발생합니다
비즈니스 규칙 배리어 트리거: 일반적으로 BEFORE/AFTER DELETE 또는 UPDATE 에 적용됩니다. 이러한 트리거는 일부 비즈니스 규칙을 위반하는 데이터 입력 또는 삭제를 방지하기 위해 _배리어_를 생성하기 위한 것입니다.
트리거 대신: 예를 들어, 뷰에 삽입을 허용하는 데 사용되는 트리거는 지원되지 않습니다. 권장 사항은 해당 로직을 저장 프로시저로 변환하고 삽입/삭제/업데이트 작업에 사용할 때마다 호출을 도입하는 것입니다.
데이터베이스 트리거: 복제할 수 없으므로 이 논리를 저장 프로시저로 캡슐화하는 것이 좋습니다. 하지만 이 논리는 수동으로 호출해야 합니다.
일반 애프터 트리거: 일부 이후 트리거, 스트림 및 작업을 활용할 수 있는 경우 아래 섹션을 참조하십시오.
감사 트리거¶
UPDATE 가 이러한 감사 케이스에 대해 트리거를 발생시키기 전에는 직접 처리할 수 없습니다. INSERT 케이스의 경우 초기화 트리거에 설명된 기본값 사례를 사용할 수 있습니다. 그러나 업데이트 케이스의 경우 AFTER 트리거에 대해 나중에 설명하는 대로 작업을 사용하는 것이 유일한 옵션입니다. 그러나 LAST_UPDATE 는 정확하지 않으며, 기록된 수정 사항은 작업 실행 시점이므로 오프셋이 있습니다(예: 작업이 5분마다 실행되는 경우 LAST_UPDATE 는 5분 후에 기록됨).
UPDATE 케이스의 경우 CURRENT_USER 를 캡처하는 것은 불가능합니다.
AUDIT 트리거의 다른 경우는 테이블의 변경 사항을 업데이트 테이블에 등록하는 경우입니다. 나중에 설명하는 AFTER 트리거 기법을 사용할 수 있지만, USER 정보는 추적할 수 없고 TIME 정보는 정확하지 않습니다.
초기화 트리거¶
이러한 트리거의 경우, 예를 들어, 시퀀스 값에 Snowflake 기본값 열 값 을 사용할 수 있습니다.
USER 또는 SYS_TIMESTAMP_ 대신 CURRENT__ USER() 및 CURRENT_TIMESTAMP 를 사용할 수도 있습니다.
이는 BEFORE INSERT 또는 AFTER INSERT 케이스에만 적용됩니다.
비즈니스 규칙 장벽¶
이러한 경우 DELETE 또는 UPDATE 수행 전/후에 트리거 작업을 인라인으로 연결해야 합니다.
작업은 예약에 따라 실행되고 행이 이미 수정되기 때문에 여기서는 작업을 권장하지 않습니다.
경고
이 섹션에서는 부분적으로 AFTER 트리거를 구현하는 알려진 해결 방법을 보여줍니다.
GENERIC AFTER TRIGGER¶
예 1: 기본 트리거 변환¶
Oracle¶
Snowflake¶
참고
SnowConvert AI 헬퍼 코드가 예제에서 제거되었습니다. 여기에서 확인할 수 있습니다.
Snowflake 코드에 대한 심층 설명¶
스트림¶
테이블의 변경 사항을 저장하는 역할을 합니다. 참고:
여기에는 현재 테이블 상태와 스트림 자체에 저장된 마지막 오프셋 사이의 델타가 저장됩니다. 청구 시 이 점을 고려하십시오.
업데이트 정보를 저장하는 것이 아니라 삽입으로 저장한다는 점에 유의하십시오.
같은 방식으로 삭제만 추적하거나 업데이트만 추적하도록 구성할 수 없으므로 프로시저와 작업 자체에서 필터링해야 합니다(아래 참조).
프로시저¶
트리거의 SQL 문을 실행하는 역할을 합니다. 참고:
스트림을 플러시해야 하므로 프로시저가 끝날 때 새 스트림을 생성해야 합니다.
필터링해야 하는 작업(예: AFTER-INSERTs-only 트리거)은 저장 프로시저 자체에서 필터링해야 합니다.
작업¶
이들은 스트림 변경을 정기적으로 확인하고 그에 따라 트리거의 SQL 문을 실행합니다. 참고:
작업은 예약에 따라 작동하며 작업이 트리거되지 않습니다. 즉, 테이블에서 데이터 변경이 수행되지 않은 상태에서 트리거 예약된 검사가 수행됩니다.
작업은 최소 시간이 1분이므로 60초마다 한 번 이상 실행되도록 구성할 수 없습니다.
스트림이 변경 사항을 감지하면 최악의 경우 변경 사항 감지와 트리거 실행 사이에 60초의 지연이 발생합니다.
WHEN 을 추가하면 작업 실행을 피할 수 있지만, Snowflake는 여전히 평가될 때마다 Charge를 추가하고 트리거가 실제로 실행되면 청구서에 해당 Charge가 추가됩니다.
작업은 실행할 웨어하우스가 필요하며 클라이언트가 수동으로 설정해야 합니다.
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
관련 EWIs 없음.
TYPE 속성¶
설명¶
이 장에서는 열, 변수, 레코드, 컬렉션 또는 커서를 참조할 때 TYPE 특성 을 변환하는 방법에 대해 설명합니다. 변환에는 참조 항목 데이터 타입을 가져오고 가져온 데이터 타입에 대한 참조 항목 TYPE 특성을 대체하는 작업이 포함됩니다.
샘플 소스 패턴¶
열의 TYPE 특성¶
이 경우 참조된 항목은 이전에 생성한 테이블의 열입니다.
Oracle¶
Snowflake¶
변수의 TYPE 특성¶
이 경우 참조된 항목은 이전에 선언된 변수입니다.
Oracle¶
Snowflake¶
참고
FLOAT 데이터 타입에 대한 추가 정보는 [FLOAT 데이터 타입](../basic-elements-of-oracle-sql/data-types/oracle- built-in-data-types.md#float-data-type) 섹션에서 확인할 수 있습니다.
레코드의 TYPE 특성¶
이 경우 참조된 항목은 이전에 선언된 레코드입니다.
Oracle¶
Snowflake¶
앞의 예제에서 레코드 변수를 참조하는 변수는 레코드 변수와 동일하게 OBJECT 로 변경하고, 레코드 필드를 참조하는 변수는 레코드 필드 데이터 타입(NUMBER (38, 18))으로 변경합니다.
경고
이러한 변경 사항은 임베디드 레코드에는 적용되지 않습니다.
참고
레코드에 대한 자세한 내용은 컬렉션 & 레코드 섹션에서 확인할 수 있습니다.
컬렉션의 TYPE 특성¶
이 경우 참조 항목은 컬렉션 변수이지만 컬렉션이 지원되지 않으므로 참조 항목 TYPE 특성이 VARIANT 데이터 타입으로 변경됩니다.
Oracle¶
Snowflake¶
커서의 TYPE 특성¶
이 경우 참조 항목은 커서 변수이지만, REF 커서는 지원되지 않으므로 참조 항목 TYPE 특성은 VARIANT 데이터 타입으로 변경됩니다.
Oracle¶
Snowflake¶
참고
참조 항목의 데이터 타입을 얻을 수 없는 경우 참조 항목 TYPE 특성은 VARIANT 로 변경됩니다.
문제 파악¶
1. Cursors and collections declarations are not supported.¶
컬렉션 및 커서 변수 선언은 아직 지원되지 않으므로 참조 항목 TYPE 특성은 VARIANT 로 변경되고 이러한 경우 경고가 추가됩니다.
2. Original data type could not be obtained.¶
참조 항목 데이터 타입을 가져올 수 없는 경우 참조 항목 TYPE 특성은 VARIANT 로 변경되고 경고가 추가됩니다.
관련 EWIs¶
SSC-EWI-0036: 데이터 타입이 다른 데이터 타입으로 변환되었습니다.
SSC-EWI-0056: 지원되지 않는 Create Type입니다.
SSC-EWI-0058: 이 기능은 현재 Snowflake Scripting에서 지원되지 않습니다.
SSC-EWI-0062: 사용자 지정 유형 사용법이 베리언트로 변경되었습니다.
SSC-EWI-OR0129: 아래 문에는 중첩 커서의 사용법이 있습니다.
SSC-FDM-0006: 숫자 유형 열이 Snowflake에서 유사하게 동작하지 않을 수 있습니다.