ATOMIC instrukcja złożona

Dotyczy:zaznaczone jako tak Databricks SQL zaznaczone jako tak Databricks Runtime 18.0 lub nowszego

Implementuje blok skryptu SQL, który może zawierać sekwencję instrukcji SQL, instrukcji sterowania przepływem, deklaracje zmiennych lokalnych i procedury obsługi wyjątków. Po oznaczeniu jako ATOMICblok jest uruchamiany jako jednostka transakcyjna, w której wszystkie instrukcje kończą się powodzeniem lub kończą się niepowodzeniem.

Składnia

BEGIN ATOMIC
  statement1;
  statement2;
  ...
END;

Parametry

Żaden. Słowo ATOMIC kluczowe modyfikuje zachowanie instrukcji złożonej .

Opis

Oznacza wyrażenie złożone jako blok transakcji atomowej. Wszystkie instrukcje w bloku są wykonywane jako pojedyncza jednostka transakcyjna: albo wszystkie zostaną wykonane pomyślnie, albo wszystkie zmiany zostaną wycofane, jeśli którakolwiek instrukcja zakończy się niepowodzeniem. Azure Databricks automatycznie zatwierdza zmiany po pomyślnym zakończeniu bloku lub cofa wszystkie zmiany w przypadku niepowodzenia jakiejkolwiek instrukcji.

Nie można BEGIN ATOMIC ... END zagnieżdżać bloków. Blok atomowy może zawierać blok nieatomowy BEGIN ... END ; te instrukcje są wykonywane jako część zewnętrznej transakcji atomowej. Możesz CALL wykonać atomową procedurę składowaną z bloku atomowego. Ciało procedury jest włączane do transakcji zewnętrznej. Wszystkie instrukcje są wykonywane w ramach jednej większej transakcji. Nie jest to transakcja zagnieżdżona.

Jest to transakcja nieinterakcyjna. Nie musisz uruchamiać COMMIT ani ROLLBACK ręcznie.

Wymagania

  • Wszystkie tabele, do których zapis odbywa się w transakcji obejmującej wiele instrukcji i wiele tabel, muszą:
  • Użyj magazynu SQL Warehouse, bezserwerowego środowiska obliczeniowego lub klastra z uruchomionym środowiskiem Databricks Runtime 18.0 lub nowszym.
  • Musisz mieć odpowiednie uprawnienia do obiektów zmodyfikowanych w ramach transakcji. Uprawnienia są sprawdzane podczas wykonywania każdej instrukcji.

Examples

W poniższych przykładach pokazano typowe wzorce transakcji przy użyciu polecenia BEGIN ATOMIC ... END;.

Koordynowanie aktualizacji w wielu tabelach

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;

Zweryfikuj dane przed zatwierdzeniem

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;

Dodatkowe zasoby