2016-09-28 6 views
1

Как использовать транзакцию с фиксацией, откатом и try catch блоком в снежинке, например, sql-сервере?Как использовать транзакцию в Snowflake?

SQL Server:

BEGIN TRY 
    BEGIN TRANSACTION 
     --Insert statement 1 
     --Insert statement 2 
    COMMIT 
END TRY 
BEGIN CATCH 

    IF @@TRANCOUNT > 0 
     ROLLBACK 
END CATCH 

Согласно документации снежинки мы можем использовать транзакцию, как это.

BEGIN TRANSACTION NAME T1; 
-- Insert statement 1; 
-- Insert statement 2; 
COMMIT; 

ответ

3

С сегодняшнего дня Snowflake не предоставляет эквивалентную конструкцию. Мы работаем над функцией (которая вскоре будет выпущена )), что позволяет прервать транзакцию, если какая-либо инструкция в ней не удалась, что должно адресовать этот прецедент.

0

Чтобы начать транзакцию в текущем сеансе.

BEGIN [ WORK | TRANSACTION ] [ NAME <name> ] 
START TRANSACTION [ NAME <name> ] 

Пример

BEGIN TRANSACTION NAME T1; 

SELECT CURRENT_TRANSACTION(); 

-----------------------+ 
CURRENT_TRANSACTION() | 
-----------------------+ 
1432071497832   | 
-----------------------+ 

INSERT INTO A1 VALUES (1), (2); 

-------------------------+ 
number of rows inserted | 
-------------------------+ 
2      | 
-------------------------+ 

COMMIT; 

Откат

SELECT COUNT(*) FROM A1; 

----------+ 
COUNT(*) | 
----------+ 
0  | 
----------+ 

BEGIN NAME T4; 

SELECT CURRENT_TRANSACTION(); 

-----------------------+ 
CURRENT_TRANSACTION() | 
-----------------------+ 
1432071523422   | 
-----------------------+ 

INSERT INTO A1 VALUES (1), (2); 

-------------------------+ 
number of rows inserted | 
-------------------------+ 
2      | 
-------------------------+ 

ROLLBACK; 

SELECT COUNT(*) FROM A1; 

----------+ 
COUNT(*) | 
----------+ 
0  | 
----------+ 
+0

Как откатить транзакцию, если ошибка произошла в T1? –

1

TRANSACTION_ABORT_ON_ERROR параметр сеанса позволяет операторы, которые возвращают сообщение об ошибке, чтобы прервать транзакцию без автоматической фиксации. Все заявления, выпущенные внутри этой транзакции, завершаются до тех пор, пока не будет выполнен оператор фиксации или откат для закрытия транзакции.

https://docs.snowflake.net/manuals/sql-reference/parameters.html#transaction-abort-on-error