Вызов хранимой процедуры с временной таблицей внутри транзакций - PullRequest
0 голосов
/ 30 мая 2020

У меня есть хранимая процедура javascript, которая создает внутри нее временную таблицу, используя синтаксис CTAS для хранения некоторых временных результатов во время вычислений. Я хочу иметь возможность вызывать эту хранимую процедуру внутри транзакции. Разве это не разрешено?

CREATE PROCEDURE my_stored_proc()
RETURNS BOOLEAN NOT NULL 
LANGUAGE javascript 
EXECUTE AS CALLER
AS 
$$
    ...
    var stmt = snowflake.createStatement(
        {sqlText: "CREATE TEMPORARY TABLE temp_table..."}
        );
    var rs = stmt.execute();
    ...
$$;

BEGIN;
...
CALL my_stored_proc();
...
COMMIT;

Я пытался обернуть эту сохраненную pro c транзакцией, но она фиксируется, как только сохраненная pro c завершается, я хочу иметь возможность откатить операторов, если во время выполнения сохраненным pro c возникла ошибка.

1 Ответ

0 голосов
/ 30 мая 2020

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

https://docs.snowflake.com/en/sql-reference/stored-procedures-usage.html#transaction -управление

...