Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :
Databricks SQL
Databricks Runtime 16.3 et versions ultérieures
Implémente un bloc de script SQL qui peut contenir une séquence d’instructions SQL, d’instructions de contrôle de flux, de déclarations de variables locales et de gestionnaires d’exceptions. Lorsqu’elles sont marquées comme ATOMIC, le bloc s’exécute en tant qu’unité transactionnelle où toutes les instructions réussissent ensemble ou échouent ensemble.
Remarque
Lors de l’appel d’une instruction composée à partir d’un notebook, il doit s’agir de la seule instruction dans la cellule.
Syntaxe
[ 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 } [, ...] }
Avant Databricks Runtime 17.2, vous ne pouvez déclarer qu’une seule variable à la fois.
Paramètres
-
Un identificateur facultatif est utilisé pour qualifier les variables définies dans le composé et pour quitter le composé. Les deux occurrences d’étiquette doivent correspondre et l’étiquette
ENDne peut être spécifiée que silabel:elle est spécifiée.l’étiquette ne doit pas être spécifiée pour une instruction composée de niveau supérieur ou pour une
ATOMICinstruction composée. ATOMICS’applique à :
Databricks SQL
Databricks Runtime 17.0 et versions ultérieuresImportant
Les instructions composées ATOMIC sont en préversion publique.
Marque l’instruction composée comme bloc de transaction atomique. Toutes les instructions du bloc s’exécutent sous la forme d’une seule unité transactionnelle : toutes les instructions réussissent ensemble ou toutes les modifications sont restaurées si une instruction échoue. Azure Databricks valide automatiquement les modifications lorsque le bloc se termine correctement, ou restaure toutes les modifications en cas d’échec d’une instruction.
Les blocs atomiques fournissent la même isolation, visibilité, gestion des erreurs et limite la sémantique que les transactions interactives explicites. Toutefois, les blocs atomiques offrent une syntaxe plus simple avec le comportement de validation et de restauration automatique.
La saisie d’un
BEGIN ATOMIC ... ENDbloc commence implicitement une transaction. La saisie semi-automatique valide implicitement la transaction. Les erreurs entraînent l’abandon et la restauration automatique de la transaction.Remarque
Les transactions multi-tables nécessitent des validations Databricks Runtime 18.0 et ultérieures et gérées par le catalogue activées sur toutes les tables. Les transactions atomiques à table unique fonctionnent dans Databricks Runtime 17.0 et versions ultérieures sans exigences supplémentaires.
Les restrictions suivantes s’appliquent aux instructions composées atomiques :
-
BEGIN ATOMIC ... ENDles blocs peuvent être appelés dans d’autres blocs atomiques. Le bloc interne est aplatit dans la transaction externe : toutes les instructions s’exécutent dans le cadre d’une transaction plus grande. Il ne s’agit pas d’une transaction imbriquée. Un bloc atomique ne peut pas contenir de bloc non atomiqueBEGIN ... END. - Les blocs atomiques ne peuvent pas être imbriqués dans des blocs non atomiques
BEGIN ... END. - Les gestionnaires d’exceptions (
DECLARE ... HANDLER) ne sont pas autorisés dans les blocs atomiques. - Les blocs atomiques ne peuvent pas être définis dans les gestionnaires d’exceptions.
- Seules les opérations DML (
INSERT, ,UPDATE,DELETEMERGE),SELECTles instructions, les déclarations et les affectations de variables, les instructions de flux de contrôle (IFetSIGNALsimilaires) et les appels aux procédures stockées atomiques sont autorisés dans des blocs atomiques. Les instructions DDL et d’autres opérations ne sont pas prises en charge. - Le paramètre des variables locales ou de session n’est pas transactionnel. Autrement dit, les affectations de variables ne sont pas soumises à une restauration en cas d’échec de transaction.
Consultez les transactions non interactives.
-
NOT ATOMICSpécifie que, si une instruction SQL dans le composé échoue, les instructions SQL précédentes ne seront pas restaurées. Il s’agit du comportement par défaut lorsqu’il
ATOMICn’est pas spécifié.declare_variableDéclaration de variable locale pour une ou plusieurs variables
-
Un nom de la variable. Le nom ne doit pas être qualifié et doit être unique dans la déclaration composée.
data_typeTout type de données pris en charge. Si data_type est omis, vous devez spécifier DEFAULT et le type est dérivé du default_expression.
{ DEFAULT | = } default_expressionDéfinit la valeur initiale de la variable après la déclaration. default_expression doit pouvoir être converti en data_type. Si aucune valeur par défaut n’est spécifiée, la variable est initialisée avec NULL.
-
Declare_conditionDéclaration de condition locale
-
Le nom non qualifié de la condition est limité à l’instruction composée.
sqlstateLittéral
STRINGde 5 caractères alphanumériques (insensibles à la casse) composés de lettres de A à Z et de chiffres de 0 à 9. SQLSTATE ne doit pas commencer par « 00 », « 01 » ou « XX ». Tout SQLSTATE commençant par « 02 » est également intercepté par l’exception NOT FOUND prédéfinie. S’il n’est pas spécifié, SQLSTATE est « 45000 ».
-
-
S’applique à :
Databricks Runtime 18.1 et versions ultérieuresDéclaration de curseur local pour effectuer une itération dans les résultats de la requête.
Remarque
Pour
DECLARE CURSOR, seules les erreurs de syntaxe sont détectées et déclenchées. La requête n’est pas exécutée tant que le curseur n’est pas ouvert avec OPEN.-
cursor_name : nom non qualifié du curseur, unique parmi les curseurs de cette instruction composée. Lorsque vous référencez le curseur dans OPEN, FETCH ou CLOSE, vous pouvez qualifier le nom du curseur avec l’étiquette d’instruction composée (par exemple
label.my_cursor) pour lever l’ambiguïté dans les étendues imbriquées. -
ASENSITIVE|INSENSITIVE: facultatif. Une fois le curseur ouvert, le jeu de résultats n’est pas affecté par les modifications DML. Il s’agit du comportement par défaut et uniquement pris en charge. - requête : requête qui définit le curseur ; elle est exécutée lorsque le curseur est ouvert avec OPEN.
-
cursor_name : nom non qualifié du curseur, unique parmi les curseurs de cette instruction composée. Lorsque vous référencez le curseur dans OPEN, FETCH ou CLOSE, vous pouvez qualifier le nom du curseur avec l’étiquette d’instruction composée (par exemple
declare_handlerDéclaration d’un gestionnaire d’erreurs.
handler_typeEXITClassifie le gestionnaire pour quitter l’instruction composée une fois la condition gérée. Tous les curseurs ouverts dans l’instruction composée et les instructions composées imbriquées sont implicitement fermés.
CONTINUES’applique à :
Databricks Runtime 18.1 et versions ultérieuresClassifie le gestionnaire pour poursuivre l’exécution une fois le gestionnaire terminé. L’exécution reprend avec l’instruction qui suit celle qui a déclenché la condition.
condition_valuesSpécifie à quels sqlstates ou conditions le gestionnaire s’applique. Les valeurs de condition doivent être uniques dans tous les gestionnaires de l’instruction composée. Les valeurs de condition spécifiques sont prioritaires sur
SQLEXCEPTION.sqlstateLittéral
STRINGde 5 caractères'A'-'Z'et'0'-'9'(insensible à la casse).-
Condition définie dans ce composé, une instruction composée externe ou une classe d’erreur définie par le système.
SQLEXCEPTIONS’applique à n’importe quelle condition d’erreur orientée utilisateur.
NOT FOUNDS’applique à toute condition d’erreur avec une classe SQLSTATE '02', y compris la condition CURSOR_NO_MORE_ROWS (SQLSTATE
'02000') levée lors de l’extraction au-delà de la fin d’un jeu de résultats de curseur.handler_actionInstruction SQL à exécuter quand l’une des valeurs de condition se produit. Pour ajouter plusieurs instructions, utilisez une instruction composée imbriquée.
SQL_statementInstruction SQL telle qu’une instruction DDL, DML, de contrôle ou instruction composée. Tout
SELECTouVALUESinstruction produit un jeu de résultats que l’appelant peut consommer.
Exemples
Instruction composée non atomique avec gestionnaire d’exceptions
-- 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
Instruction composée atomique
-- 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;
Instruction composée atomique avec restauration automatique
-- 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
Instruction composée atomique avec des variables
-- 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;
Articles connexes
- Écriture de scripts SQL
- Transactions
- Modes de transaction
- DÉBUT DE LA TRANSACTION
- COMMIT
- ROLLBACK
- Instruction CASE
- Instruction IF
- Instruction LOOP
- Instruction WHILE
- Instruction REPEAT
- Instruction FOR
- Instruction ITERATE
- Instruction LEAVE
- Déclaration de SIGNAl
- Instruction RESIGNAL
- Instruction GET DIAGNOSTICS
- INSTRUCTION OPEN
- Instruction FETCH
- INSTRUCTION CLOSE