Несколько операторов слияния в транзакции снежинки

Я новичок в снежинках и только что попытался создать хранимую процедуру для чтения дельт из потоковой таблицы A и выполнения двух операторов слияния в таблицы B и C, но я продолжаю получать это сообщение об ошибке "Multiple SQL statements in a single API call are not supported; use one API call per statement instead."

Вот моя хранимая процедура. Идея состоит в том, чтобы вызвать его из задачи when system$stream_has_data('tableA')

create or replace procedure write_delta()
return varchar    
language sql as 
$$
    begin transaction;

    -- 1/2. load table B
    merge into tableB as dest
    using tableA as src 
        on src.id = dest.id
    when not matched
        then insert (id, value) values( src.id, src.value);
        
    -- 2/2. load tableC    
    merge into tableC as dest
    using tableA as src 
        on src.id = dest.id
    when not matched
        then insert (id, value) values( src.id, src.value); 
    commit;
$$;    
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хранимые процедуры Snowflake SQL имеют две формы.

Форма 1: один оператор SQL. Это в основном полезно при вызове из задачи для выполнения одного оператора.

Форма 2: Блок сценариев Snowflake. Следующий сценарий показывает ваш код, преобразованный в хранимую процедуру с блоком сценария:

create or replace table table1 (id int, value string);
create or replace table tableB like table1;
create or replace table tableC like table1;
create or replace stream tableA on table table1;

insert into table1(id, value) values (1, 'A'), (2, 'B');
    
create or replace procedure myprocedure()
  returns varchar
  language sql
  as
  $$
    begin
    begin transaction;

    -- 1/2. load table B
    merge into tableB as dest
    using tableA as src 
        on src.id = dest.id
    when not matched
        then insert (id, value) values( src.id, src.value);
        
    -- 2/2. load tableC    
    merge into tableC as dest
    using tableA as src 
        on src.id = dest.id
    when not matched
        then insert (id, value) values( src.id, src.value); 
    commit;
    end;
  $$
  ;

call myprocedure();

select * from tableB;
select * from tableC;

Вы можете получить больше информации о том, как их написать здесь: https://docs.snowflake.com/en/developer-guide/snowflake-scripting/index.html

Если вы хотите выполнить несколько операторов, вам нужно запустить хранимую процедуру с помощью сценариев Snowflake Scripting, JavaScript, Java или Python.

спасибо, я вижу, что пропустил начало и конец транзакции. Еще раз спасибо!

PaCi 21.11.2022 18:18

Другие вопросы по теме