Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 16.3 ve üzeri
SQL deyimleri dizisi, akış denetimi deyimleri, yerel değişken bildirimleri ve özel durum işleyicileri içerebilen bir SQL Betiği bloğu uygular.
ATOMIC olarak işaretlendiğinde, blok tüm ifadelerin eş zamanlı başarılı olduğu veya başarısız olduğu bir işlem birimi olarak çalışır.
Not
Bir not defterinden bileşik deyim çağrılırken hücredeki tek deyim olmalıdır.
Sözdizimi
[ label : ]
BEGIN [ ATOMIC ]
[ { declare_variable | declare_condition } ; [...] ]
[ declare_cursor ; [...] ]
[ declare_handler ; [...] ]
[ SQL_statement ; [...] ]
END [ label ]
declare_variable
DECLARE variable_name [, ...] datatype [ DEFAULT default_expr ]
declare_condition
DECLARE condition_name CONDITION [ FOR SQLSTATE [ VALUE ] sqlstate ]
declare_cursor
DECLARE cursor_name [ ASENSITIVE | INSENSITIVE ] CURSOR FOR query [ FOR READ ONLY ]
declare_handler
DECLARE handler_type HANDLER FOR condition_values handler_action
handler_type
EXIT | CONTINUE
condition_values
{ { SQLSTATE [ VALUE ] sqlstate | condition_name } [, ...] |
{ SQLEXCEPTION | NOT FOUND } [, ...] }
Databricks Runtime 17.2'nin öncesinde tek seferde yalnızca bir değişken bildirebilirsiniz.
Parametre
-
İsteğe bağlı bir tanımlayıcı, bileşik içinde tanımlanan değişkenleri niteleyip bileşikte bırakmak için kullanılır. Her iki etiket oluşumu da uyumlu olmalıdır ve
ENDetiketi yalnızcalabel:etiketi belirtildiğinde belirtilebilir.etiket , en üst düzey bileşik deyim veya bileşik deyim için
ATOMICbelirtilmemelidir. ATOMICŞunun için geçerlidir:
Databricks SQL
Databricks Runtime 17.0 ve üzeriÖnemli
ATOMIC bileşik deyimleri Genel Önizleme aşamasındadır.
Bileşik ifadeyi atomik bir işlem bloğu olarak tanımlar. Bloktaki tüm deyimler tek bir işlem birimi olarak çalışır: tüm deyimler birlikte başarılı olur veya herhangi bir deyim başarısız olursa tüm değişiklikler geri alınır. Azure Databricks blok başarıyla tamamlandığında değişiklikleri otomatik olarak işler veya herhangi bir deyim başarısız olursa tüm değişiklikleri geri alır.
Atomik bloklar, açık etkileşimli işlemler ile aynı yalıtım, görünürlük, hata işleme ve sınır semantiği sağlar. Ancak atomik bloklar, otomatik işleme ve geri alma davranışıyla daha basit söz dizimi sunar.
Blok
BEGIN ATOMIC ... ENDgirildiğinde örtük olarak bir işlem başlatılır. Başarılı tamamlama işlemi örtük olarak işlemi işler. Hatalar, işlemin otomatik olarak durdurulmasına ve geri alınmasına neden olur.Not
Çok tablolu işlemler için Databricks Runtime 18.0 ve üzerini ve katalog işlemelerinin tüm tablolarda etkinleştirilmesi gerekir. Tek tablolu atomik işlemler, ek gereksinimler olmadan Databricks Runtime 17.0 ve üzerinde çalışır.
Aşağıdaki kısıtlamalar atomik bileşik deyimler için geçerlidir:
-
BEGIN ATOMIC ... ENDbloklar diğer atomik bloklar içinde çağrılabilir. İç blok dış işleme düzleştirilir. Tüm deyimler tek bir daha büyük işlemin parçası olarak çalışır. Bu iç içe yerleştirilmiş bir işlem değildir. Atomik blok, atomikBEGIN ... ENDolmayan bir blok içeremez. - Atomik bloklar, atomik
BEGIN ... ENDolmayan bloklar içinde iç içe yerleştirilemez. - Özel durum işleyicilerine (
DECLARE ... HANDLER) atomik bloklar içinde izin verilmez. - Atomik bloklar özel durum işleyicileri içinde tanımlanamaz.
- Atomik bloklar içinde yalnızca DML işlemlerine (
INSERT,UPDATE,DELETE),MERGESELECTdeyimlerine, değişken bildirimlerine ve atamalarına, denetim akışı deyimlerine (IF,SIGNALve benzeri) ve atomik saklı yordamlara çağrılara izin verilir. DDL deyimleri ve diğer işlemler desteklenmez. - Yerel veya oturum değişkenlerinin ayarlanması işlemsel değildir. Yani, değişken atamaları işlem hatasında geri alınmaya tabi değildir.
-
NOT ATOMICBileşik içindeki bir SQL deyimi başarısız olursa önceki SQL deyimlerinin geri alınmayacaklarını belirtir. Bu, belirtilmediğinde
ATOMICvarsayılan davranıştır.declare_variableBir veya daha fazla değişken için yerel değişken bildirimi
-
Değişkenin adı. Ad, sıfatlarla nitelendirilmemeli ve bileşik deyim içinde benzersiz olmalıdır.
data_typeDesteklenen herhangi bir veri türü. data_type atlanırsa, DEFAULT belirtmeniz gerekir ve tür değeri default_expression'dan alınır.
{ DEFAULT | = } default_expressionBildiriminden sonra değişkenin ilk değerini tanımlar. default_expression, data_type'a dönüştürülebilir olmalıdır. Varsayılan belirtilmezse, değişken NULL ile başlatılır.
-
Declare_conditionYerel koşul bildirimi
-
Koşulun nitelenmemiş adı bileşik deyimi kapsamındadır.
sqlstateA-Z ve 0-9 içeren, büyük/küçük harfe duyarsız 5 alfasayısal karakterden oluşan bir
STRINGsabit değeridir. SQLSTATE '00', '01' veya 'XX' ile başlamamalıdır. '02' ile başlayan tüm SQLSTATE'ler de önceden tanımlanmış NOT FOUND özel durumu tarafından yakalanacaktır. Belirtilmezse, SQLSTATE '45000' olur.
-
-
Şunun için geçerlidir:
Databricks Runtime 18.1 ve üzerini denetleyinSorgu sonuçlarında yineleme için yerel imleç bildirimi.
Not
için
DECLARE CURSORyalnızca söz dizimi hataları algılanıp oluşturulur. İmleç OPEN ile açılana kadar sorgu yürütülür.-
cursor_name: İmleç için nitelenmemiş, bu bileşik deyimdeki imleçler arasında benzersiz bir ad.
OPEN, FETCH veya CLOSE içinde imlece başvururken, iç içe yerleştirilmiş kapsamlarda belirsizliği sağlamak için imleç adını bileşik deyim etiketiyle (örneğin,
label.my_cursor) niteleyebilirsiniz. -
ASENSITIVE|INSENSITIVE: İsteğe bağlı. İmleç açıldıktan sonra sonuç kümesi DML değişikliklerini etkilemez. Bu, varsayılan ve yalnızca desteklenen davranıştır. - query: İmleci tanımlayan sorgu ; imleç OPEN ile açıldığında yürütülür.
-
cursor_name: İmleç için nitelenmemiş, bu bileşik deyimdeki imleçler arasında benzersiz bir ad.
OPEN, FETCH veya CLOSE içinde imlece başvururken, iç içe yerleştirilmiş kapsamlarda belirsizliği sağlamak için imleç adını bileşik deyim etiketiyle (örneğin,
declare_handlerHata işleyicisi bildirimi.
handler_typeEXITKoşul işlendikten sonra bileşik deyiminden çıkmak için işleyiciyi sınıflandırır. Bileşik deyim ve iç içe bileşik deyimler içinde açılan tüm imleçler örtük olarak kapatılır.
CONTINUEŞunun için geçerlidir:
Databricks Runtime 18.1 ve üzerini denetleyinİşleyici tamamlandıktan sonra yürütmeye devam etmek için işleyiciyi sınıflandırır. Yürütme, koşulu oluşturanın ardından deyimiyle devam eder.
condition_valuesİşleyicinin hangi SQL durumlarına veya koşullara uygulanacağını belirtir. Koşul değerleri bileşik deyimindeki tüm işleyiciler içinde benzersiz olmalıdır. Belirli koşul değerleri
SQLEXCEPTION'dan daha önceliklidir.sqlstateSTRINGve'A'-'Z'(büyük/küçük harfe duyarsız) olan 5 karakterlik'0'-'9'ifadesi.-
Bu bileşik içinde tanımlanan bir koşul, dış bileşik deyim veya sistem tanımlı bir hata sınıfı.
SQLEXCEPTIONKullanıcıya yönelik herhangi bir hata koşulu için geçerlidir.
NOT FOUNDbir imleç sonuç kümesinin sonuna getirildiğinde tetiklenen CURSOR_NO_MORE_ROWS koşulu (SQLSTATE ) dahil olmak üzere SQLSTATE
'02000''02' sınıfına sahip herhangi bir hata koşulu için geçerlidir.handler_actionKoşul değerlerinden herhangi biri gerçekleştiğinde yürütülecek bir SQL deyimi. Birden çok deyim eklemek için iç içe yerleştirilmiş bileşik deyimi kullanın.
SQL_statementDDL, DML, denetim deyimi veya bileşik deyim gibi bir SQL deyimi. Herhangi bir
SELECTveyaVALUESdeyimi, çağıranın kullanabileceği bir sonuç kümesi oluşturur.
Örnekler
Özel durum işleyicisi ile atomik olmayan bileşik deyim
-- A compound statement with local variables, exit handler, and nested compound
> BEGIN
DECLARE a INT DEFAULT 1;
DECLARE b INT DEFAULT 5;
DECLARE EXIT HANDLER FOR DIVIDE_BY_ZERO
div0: BEGIN
VALUES (15);
END div0;
SET a = 10;
SET a = b / 0;
VALUES (a);
END;
15
Atomik bileşik deyimi
-- An atomic compound statement that ensures all changes commit together
> BEGIN ATOMIC
INSERT INTO accounts VALUES (1, 'Alice', 1000);
INSERT INTO accounts VALUES (2, 'Bob', 2000);
UPDATE accounts SET balance = balance + 100 WHERE id = 1;
END;
Otomatik geri alma ile atomik bileşik deyimi
-- If any statement fails, all changes are rolled back automatically
> BEGIN ATOMIC
INSERT INTO orders VALUES (101, 'Product A', 50.00);
UPDATE inventory SET quantity = quantity - 1 WHERE product = 'Product A';
-- If this statement fails, both the INSERT and UPDATE are rolled back
INSERT INTO audit_log VALUES (101, current_timestamp(), 1/0);
END;
-- Error: Division by zero
-- All changes rolled back automatically
Değişkenlerle atomik bileşik deyimi
-- Variables can be used within atomic blocks
> BEGIN ATOMIC
DECLARE total_amount DECIMAL(10, 2);
INSERT INTO sales VALUES (301, 150.00, current_date());
SET total_amount = (SELECT SUM(amount) FROM sales WHERE sale_date = current_date());
UPDATE daily_summary SET total = total_amount WHERE summary_date = current_date();
END;