Enunciado do composto ATOMIC

Aplica-se a:marcado sim Databricks SQL marcado sim Databricks Runtime 18.0 e superiores

Implementa um bloco de Script SQL que pode conter uma sequência de instruções SQL, instruções de controle de fluxo, declarações de variáveis locais e manipuladores de exceções. Quando marcado como ATOMIC, o bloco executa-se como uma unidade transacional onde todas as instruções têm sucesso em conjunto ou falham em conjunto.

Sintaxe

BEGIN ATOMIC
  statement1;
  statement2;
  ...
END;

Parâmetros

Nenhum. A ATOMIC palavra-chave modifica o comportamento da declaração composta .

Descrição

Marca a declaração composta como um bloco transacional atómico. Todas as instruções dentro do bloco funcionam como uma única unidade transacional: ou todas as instruções têm sucesso em conjunto, ou todas as alterações são revertidas se alguma instrução falhar. O Azure Databricks confirma automaticamente as alterações quando o bloco é concluído com sucesso, ou reverte todas as alterações se alguma instrução falhar.

Não podes aninhar blocos BEGIN ATOMIC ... END. Um bloco atómico pode conter um bloco não atómico BEGIN ... END ; essas instruções executam-se como parte da transação atómica externa. Pode CALL executar um procedimento armazenado atómico a partir de um bloco atómico. O corpo do procedimento é integrado na transação externa. Todas as instruções são executadas como parte de uma única transação maior. Isto não é uma transação aninhada.

Esta é uma transação não interativa. Não é necessário executar COMMIT nem ROLLBACK manualmente.

Requisitos

  • Todas as tabelas escritas numa transação com múltiplas instruções e múltiplas tabelas devem ser:
  • Utilize um SQL warehouse, computação serverless ou um cluster a executar Databricks Runtime 18.0 e superiores.
  • Deve ter permissões adequadas sobre objetos modificados dentro da transação. Os privilégios são verificados quando cada instrução é executada.

Exemplos

Os exemplos seguintes demonstram padrões comuns de transação usando BEGIN ATOMIC ... END;.

Atualizações de coordenadas em múltiplas tabelas

BEGIN ATOMIC
  UPDATE accounts SET balance = balance - 100 WHERE id = 1;
  UPDATE accounts SET balance = balance + 100 WHERE id = 2;
  INSERT INTO audit_log VALUES (1, 2, 100, current_timestamp());
END;

Valide os dados antes de cometer

BEGIN ATOMIC
  INSERT INTO staging_customers
  SELECT * FROM external_source WHERE ingest_date = current_date();

  IF (SELECT COUNT(*) FROM staging_customers WHERE email NOT LIKE '%@%') > 0 THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid email addresses found';
  END IF;

  MERGE INTO customers AS target
  USING staging_customers AS source
  ON target.customer_id = source.customer_id
  WHEN MATCHED THEN UPDATE SET *
  WHEN NOT MATCHED THEN INSERT *;
END;

Recursos adicionais