Снежинка хранимых процедур и транзакций: неясная документация? - PullRequest
0 голосов
/ 25 марта 2020

Документы Snowflake (https://docs.snowflake.com/en/sql-reference/stored-procedures-usage.html) содержат некоторую, казалось бы, противоречивую информацию о хранимых процедурах и транзакциях: С одной стороны: «Если хранимая процедура вызывается вне явной транзакции, то каждый оператор внутри хранимая процедура выполняется как отдельная транзакция. " С другой стороны: «В настоящее время команды управления транзакциями (BEGIN, COMMIT, ROLLBACK) не разрешены внутри хранимой процедуры. Это означает, что хранимая процедура выполняется целиком в рамках одной транзакции (явной или неявной)». Что из двух это?

1 Ответ

2 голосов
/ 25 марта 2020

Если вы просто вызываете хранимую процедуру, это явно не в транзакции. Каждая операция будет видна после ее завершения.

Если вы запускаете транзакцию и вызываете хранимую процедуру, она находится в транзакции, и до тех пор, пока вы не выполните DDL, который нарушает транзакции типа «снежинка», вы просто атом c.

То, как мы это читаем / понимаем.

Документы говорят то, что я сказал:

Если хранимая процедура вызывается вне явной транзакции, затем каждый оператор внутри хранимой процедуры выполняется как отдельная транзакция.

эта часть объясняет, откуда берется явная / неявная часть

Помните, что операторы DDL ( CREATE TABLE, et c.) Вызывает неявный COMMIT. Такие операторы не должны использоваться внутри хранимой процедуры, если процедура будет вызываться внутри транзакции. Например, следующий псевдокод демонстрирует, что не нужно делать:

В этой части объясняется причина прерывания транзакций

В настоящее время команды управления транзакциями (BEGIN, COMMIT , ROLLBACK) не разрешены внутри хранимой процедуры. Это означает, что хранимая процедура выполняется полностью в рамках одной транзакции (явно или неявно).

Таким образом, эта часть относится к этим другим частям. Это говорит о том, что вы не можете выполнять вложенные / рекурсивные транзакции. Как вы можете в других БД.

...