如何在Snowflake中使用交易?

时间:2016-09-28 07:25:06

标签: snowflake snowflake-datawarehouse

如何在雪花般的sql server中使用commit,rollback和try catch块进行事务处理?

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 个答案:

答案 0 :(得分:3)

截至今天,Snowflake没有提供相同的结构。我们正在处理一项功能(即将发布非常),如果其中的任何语句失败,则允许中止事务,这应该解决此用例。

答案 1 :(得分:3)

TRANSACTION_ABORT_ON_ERROR会话参数允许返回错误的语句中止非自动提交事务。在该事务内发出的所有语句都会失败,直到执行commit或rollback语句来关闭事务。

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

答案 2 :(得分:1)

在当前会话中开始交易。

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        |
----------+