【问题标题】:Snowflake stored procedures and transactions: unclear documentation?雪花存储过程和事务:文档不清楚?
【发布时间】:2020-03-25 19:18:52
【问题描述】:

Snowflake 文档 (https://docs.snowflake.com/en/sql-reference/stored-procedures-usage.html) 有一些关于存储过程和事务的看似矛盾的信息:一方面:“如果在显式事务之外调用存储过程,则存储过程中的每个语句都作为单独的语句执行交易。”另一方面:“目前,存储过程中不允许使用事务控制命令(BEGIN、COMMIT、ROLLBACK)。这意味着存储过程完全在单个事务中(显式或隐式)执行。”这两个是哪个?

【问题讨论】:

    标签: transactions snowflake-cloud-data-platform


    【解决方案1】:

    如果您只是调用存储过程,它不会显式地在事务中。每个操作在完成时都将可见..

    如果你启动一个事务并调用一个存储过程,它就在一个事务中,只要你不做任何破坏雪花事务的 DDL,你就是原子的。

    这就是我们阅读/理解它的方式。

    文档如我所说:

    如果在显式事务之外调用存储过程,则存储过程中的每个语句都将作为单独的事务执行。

    这是解释显式/隐式部分来自何处的部分

    请记住,DDL 语句(CREATE TABLE 等)会导致隐式 COMMIT。如果将在事务中调用存储过程,则不应在存储过程中使用此类语句。例如,下面的伪代码演示了不该做什么:

    这部分解释了交易被破坏的原因

    目前,存储过程中不允许使用事务控制命令(BEGIN、COMMIT、ROLLBACK)。这意味着存储过程完全在单个事务中执行(显式或隐式)。

    因此,这部分是指其他部分。它实际上是说您不能进行嵌套/递归事务。就像你可以在其他数据库中一样。

    【讨论】:

    • 这是有道理的......所以是文档中的“(显式或隐式)”让我感到困惑。
    • 我试着添加更多的词,把它们联系在一起,这对我来说很有意义,(这不是很好的英语,所以这可能是原因..)如果你能解释一下感觉是什么奇怪/奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2021-10-01
    • 2021-06-22
    • 2021-02-13
    • 2021-08-25
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多