SnowConvert AI - SQL Server-Azure Synapse - CREATE PROCEDURE(Snowflake Scripting)¶
BEGIN 및 COMMIT 트랜잭션¶
Transact-SQL BEGIN 및 COMMIT 트랜잭션을 Snowflake SQL로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
Snowflake SQL, BEGIN 문을 실행하여 트랜잭션을 명시적으로 시작할 수 있습니다. Snowflake는 BEGIN WORK 와 BEGIN TRANSACTION 을 동의어로 지원합니다. Snowflake에서는 BEGIN TRANSACTION 을 사용할 것을 권장합니다.
A transaction can be ended explicitly by executing COMMIT. For more information, see the Snowflake Transactions documentation.
샘플 소스 패턴¶
다음 예제에서는 BEGIN 및 COMMIT 트랜잭션 문에 대해 자세히 설명합니다.
Transact-SQL¶
BEGIN/COMMIT TRANSACTION¶
레이블이 있는 Begin/Commit 트랜잭션¶
Snowflake SQL¶
BEGIN/COMMIT¶
레이블이 있는 BEGIN/COMMIT 트랜잭션¶
Known Issues¶
중첩된 트랜잭션은 Snowflake에서 지원되지 않습니다. 자세한 내용은 다음 설명서(https://docs.snowflake.com/en/sql-reference/transactions)를 참조하십시오.
CALL¶
CALL 문에 대한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
The CALL statement is not supported in Snowflake Scripting since this is part of the ODBC API and not a SQL statement, therefore this statement is not translated.
CASE¶
Transact-SQL Case 식을 Snowflake Scripting으로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
Transact-SQL 에는 식을 평가하고 조건부로 결과를 얻기 위한 두 가지 형식의 Case 식이 있습니다. 첫 번째는 input_expression 중 1개 이상의 when_expression과 일치하는지 평가하는 단순 대/소문자 식을 말합니다. 두 번째는 각 부Boolean_expression을 독립적으로 평가합니다. Else 절은 두 형식 모두에서 지원됩니다.
공식 Transact-SQL 사례 설명서에 따르면:
CASE 는 유효한 식을 허용하는 모든 문나 절에 사용할 수 있습니다. 예를 들어 SELECT, UPDATE, DELETE, SET 같은 문과 select_list, IN, WHERE, ORDER BY, HAVING 같은 절에 CASE 를 사용할 수 있습니다.
For more information, see the Transact-SQL CASE documentation.
참고: Transact-SQL 에서는 괄호 안에 입력_표현식과 부울_표현식을 선택적으로 캡슐화할 수 있으며, Snowflake Scripting도 마찬가지입니다.
샘플 소스 패턴¶
다음 예제에서는 Case 식을 사용할 수 있는 두 가지 시나리오와 Snowflake Scripting과의 차이점을 자세히 설명합니다.
대/소문자 사용 선택¶
Transact-SQL¶
단순 CASE¶
검색된 CASE¶
결과¶
sqlLOGINID |
status |
|---|---|
adventure-works\ken0 |
SINGLE |
adventure-works\ erri0 |
SINGLE |
adventure-works\roberto0 |
MARIED |
adventure-works\rob0 |
SINGLE |
adventure-works\gail0 |
MARIED |
adventure-works\jossef0 |
MARIED |
adventure-works\dylan0 |
MARIED |
adventure-works\diane1 |
SINGLE |
adventure-works\gigi0 |
MARIED |
adventure-works\michael6 |
MARIED |
Snowflake Scripting¶
이 시나리오에서는 Case 식 자체에 대한 차이점은 없습니다.
경고
The declaration and assignment of the res variable is to demonstrate the functional equivalence between both languages. It does not appear in the actual output.
단순 CASE¶
검색된 CASE¶
결과¶
LOGINID |
STATUS |
|---|---|
adventure-worksken0 |
SINGLE |
adventure-works erri0 |
SINGLE |
adventure-worksoberto0 |
MARIED |
adventure-worksob0 |
SINGLE |
adventure-worksgail0 |
MARIED |
adventure-worksjossef0 |
MARIED |
adventure-worksdylan0 |
MARIED |
adventure-worksdiane1 |
SINGLE |
adventure-worksgigi0 |
MARIED |
adventure-worksmichael6 |
MARIED |
케이스를 사용하여 설정¶
AdventureWorks2019 데이터베이스는 두 언어 모두에서 동일한 결과를 얻기 위해 사용되었습니다.
Transact-SQL¶
단순 케이스¶
검색된 케이스¶
결과¶
결과 |
|---|
150 |
Snowflake Scripting¶
경고
Snowflake Scripting does not allow setting a case expression directly to a variable. Both Transact-SQL Case expression formats translate to the following grammar in Snowflake Scripting.
SimpleCase¶
검색된 케이스¶
결과¶
결과 |
|---|
150 |
관련 EWIs¶
SSC-EWI-0073: 보류 중 함수 동등성 검토.
CREATE PROCEDURE¶
Transact-SQL CREATE PROCEDURE 절을 Snowflake로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
생성 프로시저 문을 사용하면 다음과 같은 저장 프로시저를 생성할 수 있습니다.
입력 매개 변수를 수락하고 여러 값을 출력 매개 변수의 형태로 호출 프로시저 또는 배치에 반환합니다.
다른 프로시저 호출을 포함하여 데이터베이스에서 작업을 수행하는 프로그래밍 문을 포함합니다.
호출 프로시저 또는 배치에 상태 값을 반환하여 성공 또는 실패(및 실패 이유)를 표시합니다.
For more information, see the Transact-SQL CREATE PROCEDURE documentation.
샘플 소스 패턴¶
본문이 없는 저장 프로시저¶
A stored procedure without a body is an unusual scenario that is allowed in Transact-SQL. Snowflake Scripting does not allow defining procedures without a body, but the following example shows the equivalence.
Transact-SQL¶
절차¶
Snowflake Scripting¶
기본 저장 프로시저¶
다음 예제에서는 AdventureWorks2019 데이터베이스에 새 개인정보 보호 부서를 포함하는 간단한 저장 프로시저를 자세히 설명합니다.
Transact-SQL¶
Snowflake Scripting¶
프로시저 변경¶
ALTER 프로시저에 대한 변환은 기본 프로시저와 동일합니다.
Transact-SQL¶
Snowflake Scripting¶
매개 변수 사용¶
매개 변수를 사용하여 논리를 구동하거나 저장 프로시저 내에서 동적 SQL 문을 구성할 수 있습니다. 다음 예제에서는 호출자가 보낸 인자에 따라 새 제품 가격을 설정하는 단순한 SetNewPrice 저장 프로시저를 구성합니다.
Transact-SQL¶
Snowflake Scripting¶
출력 매개 변수¶
Transact-SQL 출력 키워드는 매개 변수가 출력 매개 변수이며 해당 값이 저장 프로시저 호출자에게 반환될 것임을 나타냅니다. 예를 들어, 다음 프로시저는 특정 직원의 휴가 시간을 반환합니다.
Transact-SQL¶
Snowflake Scripting¶
선택적 매개 변수¶
매개 변수를 선언할 때 기본값이 지정되어 있는 경우 매개 변수는 선택 사항으로 간주됩니다. 프로시저 호출에서 선택적 매개 변수에 대한 값을 제공할 필요는 없습니다.
Transact-SQL¶
Snowflake Scripting¶
EXECUTE AS¶
Transact-SQL 의 EXECUTE AS 절은 저장 프로시저의 실행 컨텍스트를 정의하여 데이터베이스 엔진이 프로시저 내에서 참조되는 오브젝트에 대한 권한을 검증하는 데 사용하는 사용자 계정을 지정합니다. 예를 들어, 이전 GetVacationHours 프로시저를 수정하여 다른 실행 컨텍스트를 정의할 수 있습니다.
소유자(Snowflake Scripting의 기본값)
Transact-SQL¶
Snowflake Scripting¶
호출자¶
Transact-SQL¶
Snowflake Scripting¶
경고
SELF 및 특정 사용자(‘user_name’) 실행 컨텍스트는 Snowflake Scripting에서 지원되지 않습니다.
READONLY AND VARYING PARAMETERS¶
Snowflake는 READONLY 및 VARYING 매개 변수 유형을 지원하지 않으며 대신 FDM 이 추가됩니다.
Transact-SQL¶
Snowflake Scripting¶
Known Issues¶
지원되지 않는 선택적 인자¶
[VARYING] cursor 매개 변수에만 적용됩니다. 출력 매개 변수로 지원되는 결과 세트를 지정합니다. 이 매개 변수는 프로시저에 의해 동적으로 구성되며 그 내용은 다를 수 있습니다. Snowflake Scripting은 CURSOR 를 유효한 반환 데이터 타입으로 지원하지 않습니다.
[= default] 기본값 정의를 통해 매개 변수를 선택 사항으로 설정합니다. Snowflake Scripting은 기본적으로 기본값 매개 변수를 지원하지 않습니다.
[READONLY] 프로시저 본문 내에서 매개 변수를 업데이트하거나 수정할 수 없음을 나타냅니다. 현재 Snowflake Scripting에서는 지원되지 않습니다.
[WITH RECOMPILE] 데이터베이스 엔진이 저장 프로시저가 실행될 때마다 쿼리 계획을 컴파일하도록 강제합니다. 현재 Snowflake Scripting에서는 지원되지 않습니다.
[WITH ENCRYPTION] 저장 프로시저의 텍스트를 암호화하는 데 사용됩니다. 시스템 테이블 또는 데이터베이스 파일에 대한 액세스 권한이 있는 사용자(예: sysadmin 사용자)만 프로시저가 생성된 후 프로시저 텍스트에 액세스할 수 있습니다. 현재 Snowflake Scripting에서는 지원되지 않습니다.
[FOR REPLICATION] 저장 프로시저가 복제 중에만 실행되도록 제한합니다. 현재 Snowflake Scripting에서는 지원되지 않습니다.
관련 EWIs¶
SSC-EWI-0030: 아래 문에서는 동적 SQL이 사용됩니다.
SSC-EWI-0058: 기능은 현재 Snowflake Scripting에서 지원되지 않습니다.
CURSOR¶
Transact-SQL CURSOR 문을 Snowflake Scripting으로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
Transact-SQL statements produce a complete result set, but there are times when the results are best processed one row at a time. Opening a cursor on a result set allows processing the result set one row at a time. You can assign a cursor to a variable or parameter with a cursor data type. For more information, see the Transact-SQL Cursors documentation.
샘플 소스 패턴¶
Transact-SQL¶
다음 매개 변수는 Snowflake Scripting에서 본질적으로 지원된다는 점에 유의하십시오.
[LOCAL].
[FORWARD_ONLY].
[FAST_FORWARD]는 FORWARD_ONLY (FETCH NEXT 전용) 및 READ_ONLY 를 지정합니다.
[READ_ONLY] WHERE CURRENT OF 는 Snowflake Scripting에 존재하지 않습니다.
커서¶
결과¶
Snowflake Scripting¶
커서¶
결과¶
Known Issues¶
다음 매개 변수는 지원되지 않습니다.
DECLARE CURSOR
[ GLOBAL ] 연결에 의해 실행되는 저장 프로시저 또는 배치에서 커서 이름을 참조할 수 있습니다. Snowflake Scripting은 커서를 로컬로만 사용할 수 있습니다.
[ SCROLL ] Snowflake Scripting는 FETCH NEXT 만 지원합니다.
[ KEYSET | DYNAMIC ] 커서를 열고 테이블에 대한 업데이트가 수행된 후 커서를 가져올 때 일부 변경 사항이 표시될 수 있으며, Snowflake Scripting은 STATIC 만 지원합니다. 즉, 커서가 열린 후에는 테이블의 변경 사항이 커서에 의해 감지되지 않습니다.
[SCROLL_LOCKS] 커서를 통해 수행된 위치 업데이트 또는 삭제가 성공하도록 보장하도록 지정하며, Snowflake Scripting은 이를 보장할 수 없습니다.
[OPTIMISTIC] 커서를 통해 업데이트 또는 삭제가 수행되면 타임스탬프 열 값을 비교하거나 테이블에 타임스탬프 열이 없는 경우 체크섬 값을 사용하여 행이 커서로 읽혀진 후 수정되었는지 여부를 확인합니다. Snowflake Scripting에는 이를 복제하는 내부 프로세스가 없습니다.
[TYPE_WARNING]
FETCH
[PRIOR | FIRST | LAST] Snowscripting은 NEXT 만 지원합니다.
[ABSOLUTE] Snowflake Scripting은 NEXT 만 지원하지만, 동작은 복제할 수 있습니다.
[RELATIVE] Snowflake Scripting이지만, 동작은 복제할 수 있습니다.
[ GLOBAL ] 연결에 의해 실행되는 저장 프로시저 또는 배치에서 커서 이름을 참조할 수 있습니다. Snowflake Scripting은 커서를 로컬로만 사용할 수 있습니다.
FETCH 가 없는 INTO 는 지원되지 않습니다.
FETCH 문이 루프 내부에 위치하는 경우 Snowflake 변환 코드 성능에 영향을 미칠 수 있으므로 복잡한 패턴으로 간주됩니다. 자세한 내용은 관련 문제 섹션을 확인하십시오.
내부 루프 샘플 가져오기¶
SQL 서버¶
Snowflake¶
OPEN¶
[ GLOBAL ] 연결에 의해 실행되는 저장 프로시저 또는 배치에서 커서 이름을 참조할 수 있습니다. Snowflake Scripting은 커서를 로컬로만 사용할 수 있습니다.
CLOSE
[ GLOBAL ] 연결에 의해 실행되는 저장 프로시저 또는 배치에서 커서 이름을 참조할 수 있습니다. Snowflake Scripting은 커서를 로컬로만 사용할 수 있습니다.
DEALLOCATED 커서 참조를 제거하며 Snowflake Scripting에는 이에 상응하는 기능은 없습니다.
WHERE CURRENT OF 이 문의 사용은 지원되지 않습니다. 예:
환경 변수
@@CURSOR_ROWS
@@FETCH_STATUS
관련 EWIs¶
SSC-FDM-TS0013: Snowflake Scripting 커서 행은 수정할 수 없습니다.
SSC-PRF-0003: 루프 내부의 가져오기는 복잡한 패턴으로 간주되므로 Snowflake 성능을 저하시킬 수 있습니다.
DECLARE¶
Transact-SQL DECLARE 문을 Snowflake Scripting으로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
Transact-SQL DECLARE statement allows the creation of variables that can be used in the scope of the batch or a stored procedure. For more information, see the Transact-SQL DECLARE documentation.
샘플 소스 패턴¶
변수 선언하기¶
변수는 다양한 방법으로 생성할 수 있습니다. 변수는 기본값이 있을 수도 있고 없을 수도 있으며 여러 변수를 같은 라인에 선언할 수 있습니다.
Notice that Snowflake Scripting does not allow creating more than one variable per line.
Transact-SQL¶
Snowflake Scripting¶
테이블 변수 선언하기¶
Transact-SQL 을 사용하면 일반 테이블로 사용할 수 있는 테이블 변수를 만들 수 있습니다. Snowflake Scripting은 이를 지원하지 않으며 대신 테이블을 생성한 다음 프로시저가 끝날 때 드롭할 수 있습니다.
Transact-SQL¶
Snowflake Scripting¶
루틴 외부의 DECLARE 문(함수 및 프로시저)¶
Transact-SQL 과 달리, Snowflake는 함수나 프로시저와 같은 루틴 외부에서 DECLARE 같은 고립된 문을 실행하는 것을 지원하지 않습니다. 이 시나리오의 경우 다음 예시와 같이 문을 익명 블록으로 캡슐화해야 합니다. 이 문은 일반적으로 SET STATEMENT 앞에 사용됩니다.
Transact-SQL¶
Snowflake Scripting¶
DECLARE 문으로만 구성된 시나리오가 있는 경우 이 블록은 비어 있을 수 없으므로 오류를 방지하기 위해 BEGIN…END 블록에 RETURN NULL 문을 포함해야 합니다.
Transact-SQL¶
Snowflake Scripting¶
EXECUTE¶
Transact-SQL Execute 문을 Snowflake로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
Transact-SQL EXECUTE statement allows the execution of a command string or character string within a Transact-SQL batch, a scalar-valued user-defined function, or a stored procedure. For more information, see the Transact-SQL EXECUTE documentation.
샘플 소스 패턴¶
문자 문자열 실행¶
EXECUTE 는 리터럴로 직접 전달된 SQL 작업을 수행하는 데 사용할 수 있습니다. 다음 예제에서는 AdventureWorks2019 데이터베이스에 새 개인정보 보호 부서를 삽입하는 저장 프로시저 내에서 사용됩니다.
Transact-SQL¶
Snowflake Scripting¶
저장 프로시저 실행¶
EXECUTE 를 사용하여 기존 저장 프로시저를 호출할 수도 있습니다. 다음 예제는 위에서 생성한 AddPrivacyDepartment 프로시저를 호출합니다. 그런 다음 SELECT 를 실행하여 새 부서가 성공적으로 포함되었는지 확인합니다.
Transact-SQL¶
결과¶
DepartmentID |
이름 |
GroupName |
ModifiedDate |
|---|---|---|---|
1 |
Engineering |
연구 및 개발 |
2008-04-30 00:00:00.000 |
2 |
도구 설계 |
연구 및 개발 |
2008-04-30 00:00:00.000 |
3 |
Sales |
영업 및 마케팅 |
2008-04-30 00:00:00.000 |
4 |
마케팅 |
영업 및 마케팅 |
2008-04-30 00:00:00.000 |
5 |
구매 |
재고 관리 |
2008-04-30 00:00:00.000 |
6 |
연구 및 개발 |
연구 및 개발 |
2008-04-30 00:00:00.000 |
7 |
프로덕션 |
Manufacturing |
2008-04-30 00:00:00.000 |
8 |
생산 관리 |
Manufacturing |
2008-04-30 00:00:00.000 |
9 |
인적 리소스 |
총괄 관리자 및 관리자 |
2008-04-30 00:00:00.000 |
1 0 |
Finance |
총괄 관리자 및 관리자 |
2008-04-30 00:00:00.000 |
1 1 |
정보 서비스 |
총괄 관리자 및 관리자 |
2008-04-30 00:00:00.000 |
1 2 |
문서 제어 |
품질 보증 |
2008-04-30 00:00:00.000 |
1 3 |
품질 보증 |
품질 보증 |
2008-04-30 00:00:00.000 |
1 4 |
시설 및 유지 관리 |
총괄 관리자 및 관리자 |
2008-04-30 00:00:00.000 |
1 5 |
배송 및 수령 |
재고 관리 |
2008-04-30 00:00:00.000 |
1 6 |
실행 |
총괄 관리자 및 관리자 |
2008-04-30 00:00:00.000 |
1 7 |
개인정보 보호 |
총괄 관리자 및 관리자 |
2021-11-17 12:42:54.640 |
Snowflake Scripting¶
결과¶
DEPARTMENTID |
NAME |
GROUPNAME |
MODIFIEDDATE |
|---|---|---|---|
1 |
Engineering |
연구 및 개발 |
2021-11-17 10:29:36.963 |
2 |
도구 설계 |
연구 및 개발 |
2021-11-17 10:29:37.463 |
3 |
Sales |
영업 및 마케팅 |
2021-11-17 10:29:38.192 |
4 |
마케팅 |
영업 및 마케팅 |
2021-11-17 10:29:38.733 |
5 |
구매 |
재고 관리 |
2021-11-17 10:29:39.298 |
6 |
연구 및 개발 |
연구 및 개발 |
2021-11-17 10:31:53.770 |
7 |
프로덕션 |
Manufacturing |
2021-11-17 10:31:55.082 |
8 |
생산 관리 |
Manufacturing |
2021-11-17 10:31:56.638 |
9 |
인적 리소스 |
총괄 관리자 및 관리자 |
2021-11-17 10:31:57.507 |
10 |
Finance |
총괄 관리자 및 관리자 |
2021-11-17 10:31:58.473 |
11 |
정보 서비스 |
총괄 관리자 및 관리자 |
2021-11-17 10:34:35.200 |
12 |
문서 제어 |
품질 보증 |
2021-11-17 10:34:35.741 |
13 |
품질 보증 |
품질 보증 |
2021-11-17 10:34:36.277 |
14 |
시설 및 유지 관리 |
총괄 관리자 및 관리자 |
2021-11-17 10:34:36.832 |
15 |
배송 및 수령 |
재고 관리 |
2021-11-17 10:34:37.373 |
16 |
실행 |
총괄 관리자 및 관리자 |
2021-11-17 10:34:37.918 |
17 |
개인정보 보호 |
총괄 관리자 및 관리자 |
2021-11-17 10:46:43.345 |
로컬 변수 실행 및 매개 변수 사용¶
EXECUTE 문의 일반적인 사용 사례는 동적 SQL 문이 필요한 경우입니다. 이 경우 문자열 리터럴을 실행하는 대신 문을 동적으로 구성하고 로컬 변수에 할당하여 실행할 수 있습니다. 호출된 저장 프로시저에 인자 세트를 전송하여 동적 SQL 명령을 구성할 수 있습니다.
다음 예제에서는 EXECUTE 문을 사용하여 호출자가 보낸 인자에 따라 새 제품 가격을 설정하는 간단한 SetNewPrice 저장 프로시저를 구성합니다. 마지막으로 SELECT 를 통해 새 제품 가격을 확인합니다.
Transact-SQL¶
결과¶
ListPrice |
|---|
34.9900 |
Snowflake Scripting¶
결과¶
LISTPRICE |
|---|
34.9900 |
Known Issues¶
반환 코드 사용¶
Transact-SQL EXECUTE 구문에는 스칼라 값 사용자 정의 함수의 반환 상태를 저장하는 스칼라 변수를 생성할 수 있는 @return_status 선택적 인자가 포함되어 있습니다.
반환 상태는 정수 데이터 타입으로 제한되지만 저장 프로시저에서도 사용할 수 있습니다.
이 기능을 표현하기 위해 위의 예제를 약간 수정하여 새 제품 가격을 과거 가격의 평균으로 계산하는 사용자 정의 함수를 만들 수 있습니다. 이제 저장 프로시저에 전달하는 대신 CalculateAveragePrice 함수를 호출하여 새 가격을 구하고 반환 변수에 저장하여 동적 SQL 을 구성할 수 있습니다.
Transact-SQL¶
Execute¶
결과¶
ListPrice |
|---|
34.0928 |
Snowflake Scripting¶
지원되지 않는 선택적 인자¶
@return_status
;number
@module__name_v_ar
WITH RECOMPILE, WITH RESULT SETS NONE, WITH <결과 세트 정의>
관련 EWIs¶
SSC-EWI-0030: 아래 문에서는 동적 SQL이 사용됩니다.
IF¶
Transact-SQL IF..ELSE 절을 Snowflake Scripting으로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
IF 절은 부울 식이 true이면 SQL 문 또는 문 블록을 조건부로 실행하고, 그렇지 않으면 선택 사항인 ELSE 절의 문이 실행되도록 합니다. Transact-SQL 은 또한 여러 조건이 필요한 경우 여러 개의 IF… ELSE 절을 포함하거나 CASE 절을 사용할 수 있도록 지원합니다.
For more information, see the Transact-SQL IF…ELSE documentation.
참고: 문 블록을 정의하려면 플로우 제어 키워드 BEGIN 및 END 를 사용합니다.
샘플 소스 패턴¶
Transact-SQL¶
다음 코드는 Transact-SQL 의 IF… ELSE 에서 @값이 5 미만인지, 5에서 10 사이인지 또는 다른 값을 갖는지 식별하기 위해 변수를 조건부로 지정합니다. 값은 7로 초기화되므로 두 번째 조건은 true이어야 하고 결과는 200이어야 합니다.
IF…ELSE¶
결과¶
결과 |
|---|
200 |
Snowflake Scripting¶
참고
Snowflake Scripting에서 임베드된 IF…ELSE 조건은 ELSEIF 이라고 합니다.
또한 부울 조건은 괄호 안에 괄호로 묶여 있으며 절은 항상 END IF 식으로 끝납니다.
또한 Snowflake Scripting에서는 BEGIN 및 END 키워드를 사용하여 문 블록을 정의할 필요는 없지만 필요한 경우 이 키워드를 사용할 수 있습니다.
IF…ELSE¶
결과¶
결과 |
|---|
200 |
루틴 외부의 IF 문(함수 및 프로시저)¶
Transact-SQL과 달리, Snowflake는 함수 또는 프로시저와 같은 루틴 외부에서 IF…ELSE와 같은 격리된 문을 실행하는 것을 지원하지 않습니다. 이 시나리오에서는 다음 예와 같이 해당 문을 익명 블록에 캡슐화해야 합니다. 출력 값을 올바르게 반환하는 방법에 대한 자세한 내용은 SELECT 섹션에서 확인할 수 있습니다.
Transact-SQL¶
Snowflake Scripting¶
관련 EWIs¶
SSC-EWI-0073: 보류 중 함수 동등성 검토.
SSC-FDM-0020: 여러 결과 세트가 임시 테이블에 반환됩니다.
LABEL 및 GOTO¶
Transact-SQL의 LABEL AND GOTO를 변환하기 위한 변환 참조
Applies to
SQL 서버
설명¶
Snowflake SQL 은 GOTO LABEL 문을 지원하지 않습니다. 현재 LABELS 에 설명이 추가되고 모든 발생에 대해 경고가 추가됩니다.
샘플 소스 패턴¶
다음 예제에서는 BEGIN 및 COMMIT 트랜잭션 문에 대해 자세히 설명합니다.
Transact-SQL¶
레이블이 지정된 문¶
Snowflake SQL¶
레이블이 지정된 문¶
LABEL 및 GOTO 루틴 외부의 문(함수 및 프로시저)¶
Transact-SQL¶
Snowflake Scripting¶
관련 EWIs¶
SSC-EWI-TS0045: 레이블이 지정된 문은 Snowflake Scripting에서 지원되지 않습니다.
SSC-EWI-0073: 보류 중 함수 동등성 검토.
OUTPUT PARAMETERS¶
이 문서에서는 출력 매개 변수의 현재 변환과 해당 기능이 에뮬레이션되는 방식에 대해 설명합니다.
Applies to
SQL 서버
Azure 시냅스 분석
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
An output parameter is a parameter whose value is passed out of the stored procedure, back to the calling SQL block. Since the output parameters are not supported by Snowflake Scripting, a solution has been implemented to emulate their functionality.
샘플 소스 패턴¶
단일 OUT 매개 변수¶
OUT 매개 변수에 대한 가장 기본적인 시나리오는 프로시저에 매개 변수가 하나만 있는 경우입니다. 이 경우 프로시저 본문 끝에 OUT 매개 변수를 반환하기만 하면 됩니다.
EXEC 프로시저도 변환해야 합니다. 이를 위해 CALL 이 생성되고, 매개 변수가 수정자 없이 전달되며(“OUT” 제거됨), 이후 매개 변수가 각각의 결과 값과 연관되도록 할당이 수행됩니다.
Transact-SQL¶
Snowflake Scripting¶
여러 OUT 매개 변수¶
OUT 매개 변수가 2개 이상 발견되면 프로시저의 RETURNS 절이 VARIANT 로 변경됩니다. 이는 OUT 매개 변수의 값을 저장하는 데 사용되는 OBJECT_CONSTRUCT 를 수용하기 위한 것입니다.
또한 프로시저 본문 끝에 RETURN 문이 추가됩니다. 여기에서 OBJECT_COSNTRUCT 가 생성되고 모든 OUT 매개 변수 값이 저장됩니다. 그러면 호출자는 이 오브젝트를 사용하여 해당 결과에 매개 변수 값을 할당합니다.
Transact-SQL¶
Snowflake Scripting¶
OUT 매개 변수 및 반환 값¶
Transact-SQL 에서는 프로시저에 반환 값을 가질 수 있습니다. 프로시저에 반환 값과OUT매개 변수가 모두 있는 경우다중OUT매개 변수 시나리오와 유사한 접근법을 따릅니다. 원래 반환 값은 OUT 매개 변수가 처리되는 방식으로 취급되므로 OBJECT_CONSTRUCT 내에 저장되고 호출자 프로시저 내부에서 추출됩니다.
Transact-SQL¶
Snowflake Scripting¶
쿼리¶
고객 데이터 타입 OUT 매개 변수¶
when the output parameter is a custom type, the process is similar to a regular data type.
Transact-SQL¶
Snowflake Scripting¶
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
SSC-EWI-0073: 보류 중 함수 동등성 검토.
SSC-EWI-TS0015: 데이터 타입은 Snowflake에서 지원되지 않습니다.
SET¶
Transact-SQL SET 문을 Snowflake로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
Sets the specified local variable, previously created by using the DECLARE @local_variable statement, to the specified value. For more information, see the Transact-SQL SET documentation.
다음과 같은 4가지 SET 케이스가 있습니다.
샘플 소스 패턴¶
Transact-SQL¶
사례 1¶
사례 2¶
결과 1¶
결과 |
|---|
0 |
Snowflake Scripting¶
사례 1¶
사례 2¶
결과 1¶
결과 |
|---|
0 |
루틴 외부의 SET 문(함수 및 프로시저)¶
Transact-SQL 과 달리, Snowflake는 함수나 프로시저와 같은 루틴 외부에서 SET 같은 고립된 문을 실행하는 것을 지원하지 않습니다. 이 시나리오의 경우 다음 예시와 같이 문을 익명 블록으로 캡슐화해야 합니다. 이 문은 일반적으로 DECLARE STATEMENT 뒤에 사용합니다.
Transact-SQL¶
Snowflake Scripting¶
SET 문으로만 구성된 시나리오가 있는 경우 DECLARE 블록은 필요하지 않습니다. 이 시나리오에서 선언되지 않은 변수에 값을 설정하려고 하면 런타임 오류가 발생할 수 있습니다.
Transact-SQL¶
Snowflake Scripting¶
Known Issues¶
1. SET of a local variable with property name¶
이 유형의 세트는 현재 Snowflake 스크립팅에서 지원되지 않습니다.
2. SET of a local variable with mutator method¶
이 유형의 세트는 현재 Snowflake 스크립팅에서 지원되지 않습니다.
관련 EWIs¶
SSC-EWI-TS0037: Snowflake Scripting 커서는 스크롤할 수 없습니다.
SSC-EWI-0073: 보류 중 함수 동등성 검토.
SSC-FDM-TS0013: Snowflake Scripting 커서 행은 수정할 수 없습니다.
TRY CATCH¶
Transact-SQL의 TRY CATCH 문에 대한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
Transact SQL 에 대한 오류 처리를 구현합니다. Transact-SQL 문 그룹은 TRY 블록으로 묶을 수 있습니다. TRY 블록에서 오류가 발생하면 일반적으로 CATCH 블록으로 묶인 다른 문 그룹으로 컨트롤이 전달됩니다.
샘플 소스 패턴¶
다음 예제에서는 TRY CATCH 내부 프로시저에 대한 변환을 자세히 설명합니다.
Transact-SQL¶
출력¶
Snowflake SQL¶
출력¶
외부 루틴(함수 및 프로시저)을 잡아보십시오¶
Transact-SQL¶
Snowflake Scripting¶
관련 EWIs¶
SSC-FDM-0020: 여러 결과 세트가 임시 테이블에 반환됩니다.
WHILE¶
Transact-SQL While 문을 Snowflake Scripting으로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
While 문은 지정된 조건이 true이면 SQL 문 또는 문 블록을 반복적으로 실행할 수 있습니다. WHILE 루프에서 문의 실행은 BREAK 및 CONTINUE 키워드를 사용하여 루프 내부에서 제어할 수 있습니다.
For more information, see the Transact-SQL WHILE documentation.
참고: 문 블록을 정의하려면 플로우 제어 키워드 BEGIN 및 END 를 사용합니다.
샘플 소스 패턴¶
기본 소스 패턴 코드¶
Transact-SQL¶
다음 코드는 @Iteration 변수를 반복하고 @Iteration 값이 10이 되면 종료되도록 루프의 흐름을 제어하는 Transact-SQL 의 While Loop를 참조합니다.
참고
CONTINUE 키워드 뒤에 오는 문은 실행되지 않습니다.
동안¶
결과¶
iteration |
|---|
10 |
Snowflake Scripting¶
참고
Transact-SQL 뿐만 아니라, Snowflake Scripting에서 CONTINUE 키워드 뒤의 문은 실행되지 않습니다.
Snowflake Scripting에서는 BEGIN 및 END 키워드를 사용하여 문 블록을 정의할 필요는 없지만 필요한 경우 이 키워드를 사용할 수 있습니다.
동안¶
Loop 키워드¶
Snowflake Scripting을 사용하면 DO 대신 LOOP 키워드를, END WHILE 대신 END LOOP 식을 사용할 수 있습니다.
결과¶
Iteration |
|---|
10 |
본문이 비어있는 While 소스 패턴¶
Transact-SQL¶
참고
이 예제는 IF ELSE 문이 지원되지 않는 상태에서 작성된 것으로, 해당 문이 지원되면 결과의 차이가 사라질 것입니다.
결과¶
결과 |
|---|
125 |
Snowflake Scripting¶
이 문은 Snowflake Scripting에서 빈 본문을 가질 수 없으며, 이러한 경우를 해결하기 위해 빈 본문이 감지되면 기본 BREAK 문이 추가됩니다.
결과¶
결과 |
|---|
1 |
루틴 외부의 WHILE 문(함수 및 프로시저)¶
Transact-SQL 과 달리, Snowflake는 함수나 프로시저와 같은 루틴 외부에서 WHILE 같은 고립된 문을 실행하는 것을 지원하지 않습니다. 이 시나리오의 경우 다음 예시와 같이 문을 익명 블록으로 캡슐화해야 합니다.
Transact-SQL¶
Snowflake Scripting¶
관련 EWIs¶
SSC-EWI-0073: 보류 중 함수 동등성 검토.