雪花存储过程和事务:文档不清楚?
Posted
技术标签:
【中文标题】雪花存储过程和事务:文档不清楚?【英文标题】: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)。这意味着存储过程完全在单个事务中(显式或隐式)执行。”这两个是哪个?
【问题讨论】:
【参考方案1】:如果您只是调用存储过程,它不会显式地在事务中。每个操作在完成时都将可见..
如果你启动一个事务并调用一个存储过程,它就在一个事务中,只要你不做任何破坏雪花事务的 DDL,你就是原子的。
这就是我们阅读/理解它的方式。
文档如我所说:
如果在显式事务之外调用存储过程,则存储过程中的每个语句都将作为单独的事务执行。
这是解释显式/隐式部分来自何处的部分
请记住,DDL 语句(CREATE TABLE 等)会导致隐式 COMMIT。如果将在事务中调用存储过程,则不应在存储过程中使用此类语句。例如,下面的伪代码演示了不该做什么:
这部分解释了交易被破坏的原因
目前,存储过程中不允许使用事务控制命令(BEGIN、COMMIT、ROLLBACK)。这意味着存储过程完全在单个事务中执行(显式或隐式)。
因此,这部分是指其他部分。它实际上是说您不能进行嵌套/递归事务。就像你可以在其他数据库中一样。
【讨论】:
这是有道理的......所以是文档中的“(显式或隐式)”让我感到困惑。 我试着添加更多的词,把它们联系在一起,这对我来说很有意义,(这不是很好的英语,所以这可能是原因..)如果你能解释一下感觉是什么奇怪/奇怪。以上是关于雪花存储过程和事务:文档不清楚?的主要内容,如果未能解决你的问题,请参考以下文章