Udostępnij za pośrednictwem


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 polecenia w bloku są uruchamiane jako pojedyncza jednostka transakcyjna — wszystkie polecenia zostają pomyślnie wykonane lub wszystkie zmiany są cofane, jeśli jakiekolwiek polecenie zakończy się niepowodzeniem. Usługa Azure Databricks automatycznie zatwierdza zmiany po pomyślnym zakończeniu bloku lub cofa wszystkie zmiany w przypadku niepowodzenia jakiejkolwiek instrukcji.

BEGIN ATOMIC ... END bloki mogą być zagnieżdżone w innych blokach atomowych. Blok wewnętrzny jest integrujący się z transakcją zewnętrzną — wszystkie instrukcje są wykonywane jako część jednej większej transakcji. Nie jest to transakcja zagnieżdżona. Blok atomowy nie może zawierać bloku nieatomowego BEGIN ... END.

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;