SAP Tutoriel sur les scripts SQL HANA : syntaxe et exemples
โก Rรฉsumรฉ intelligent
Script SQL dans SAP HANA รฉtend le SQL standard avec des constructions fonctionnelles et procรฉdurales. Il prend en charge les procรฉdures stockรฉes et les fonctions dรฉfinies par l'utilisateur, dรฉplaรงant la logique gourmande en donnรฉes du serveur d'applications vers la base de donnรฉes.

Qu'est-ce que le script SQL ?
SQL Script est une collection d'extensions de SQL. Il peut รชtre utilisรฉ dans une procรฉdure stockรฉe ร la place du SQL brut. Il dรฉtermine les extensions fonctionnelles et procรฉdurales.
In SQL L'utilisateur de script peut dรฉfinir des variables locales pour la structure et les tables qui sont principalement utilisรฉes pour la crรฉation de procรฉdures stockรฉes.
Le script SQL peut รฉgalement รชtre utilisรฉ dans la vue Calcul. Dans SQL Script, il existe deux conteneurs logiques diffรฉrents :
- Procรฉdure (Les procรฉdures permettent de dรฉcrire une sรฉquence de transformations de donnรฉes sur les donnรฉes passรฉes en entrรฉe et en tables de base de donnรฉes).
- Fonction dรฉfinie par l'utilisateur (le conteneur de fonctions dรฉfinies par l'utilisateur est sรฉparรฉ en fonction dรฉfinie par l'utilisateur scalaire et en fonction dรฉfinie par l'utilisateur de table).
Les รฉlรฉments du langage de script SQL sont les suivants :
Logique de script SQL dรฉclarative (extension fonctionnelle)
- Il permet la dรฉfinition de types de tables sans rรฉfรฉrencer les tables de base de donnรฉes.
- Dรฉclaration typique comme SELECT.
- Fonctions du moteur de calcul (CE).
โ ๏ธ Note de version : Les opรฉrateurs de plan du moteur de calcul, les fonctions CE_ telles que CE_COLUMN_TABLE et CE_JOIN, sont obsolรจtes. SAPLes nouveaux dรฉveloppements doivent utiliser des instructions SQL standard, que l'optimiseur gรจre au moins aussi bien. Le code CE existant continue de fonctionner, mais devra รชtre migrรฉ lors de la prochaine modification d'une procรฉdure.
Logique de script SQL d'orchestration (extension fonctionnelle)
La logique d'orchestration est utilisรฉe pour implรฉmenter le flux de donnรฉes ร l'aide d'instructions de requรชte DDL, DML et SQL et pour contrรดler la logique de flux ร l'aide de constructions de langage impรฉratives telles que des boucles et des conditions.
- Dรฉclaration du langage de dรฉfinition de donnรฉes. Par exemple, crรฉer un schรฉma.
- Langage de manipulation de donnรฉes (par exemple, insertion).
Logique de script SQL impรฉrative (extension procรฉdurale)
La logique impรฉrative divise la logique entre plusieurs flux de donnรฉes. Par exemple, IF, ELSEIF, ELSE, CASE, FOR (boucle) et exceptions.
Importance du script SQL
Seul SQL Script fournit les รฉlรฉments nรฉcessaires pour migrer la logique gourmande en donnรฉes ou le fonctionnement du serveur d'applications vers le serveur de base de donnรฉes.
Points clรฉs du script SQL
- Le script SQL est exรฉcutรฉ et traitรฉ dans le moteur de calcul de la base de donnรฉes HANA.
- SQL Script est capable d'effectuer des calculs complexes.
- Dans SQL Script, une variable locale peut รชtre dรฉclarรฉe pour contenir le rรฉsultat intermรฉdiaire.
- La procรฉdure de script SQL peut renvoyer plus de rรฉsultats en utilisant le ยซ paramรจtre de SORTIE ยป, tandis que la procรฉdure SQL normale ne peut en renvoyer qu'un seul.
- Dans SQL Script, vous pouvez dรฉfinir des types de tables globales ou locales qui peuvent รชtre utilisรฉes comme paramรจtres.
En utilisant SQL Script, le mode de traitement parallรจle peut รชtre obtenu.
Exemple de procรฉdure de script SQL
Une procรฉdure est le conteneur le plus courant. L'exemple ci-dessous lit les donnรฉes des employรฉs, les filtre et renvoie le rรฉsultat via un paramรจtre de table de sortie.
CREATE PROCEDURE DHK_SCHEMA.GET_HIGH_EARNERS ( IN im_min_salary DECIMAL(15,2), OUT ex_employees TABLE (EMP_NAME NVARCHAR(100), SALARY DECIMAL(15,2)), OUT ex_row_count INTEGER ) LANGUAGE SQLSCRIPT READS SQL DATA AS BEGIN -- Declarative logic: a table variable, not a physical table lt_all = SELECT EMP_NAME, SALARY FROM DHK_SCHEMA.EMPLOYEE WHERE SALARY >= :im_min_salary; -- Imperative logic: branch on the result SELECT COUNT(*) INTO ex_row_count FROM :lt_all; IF :ex_row_count = 0 THEN ex_employees = SELECT '' AS EMP_NAME, 0 AS SALARY FROM DUMMY WHERE 1 = 0; ELSE ex_employees = SELECT * FROM :lt_all ORDER BY SALARY DESC; END IF; END;
Il convient de noter trois conventions. Un deux-points prรฉcรจde toute lecture d'une variable, donc :lt_all lit la variable de table pendant que lt_all L'instruction `reads SQL DATA` ร gauche indique ร l'optimiseur que la procรฉdure n'a pas d'effets de bord, ce qui permet une parallรฉlisation plus poussรฉe. Or, une procรฉdure renvoyant plusieurs paramรจtres de sortie est prรฉcisรฉment une capacitรฉ qui fait dรฉfaut au SQL standard.
Le terme est simple :
CALL DHK_SCHEMA.GET_HIGH_EARNERS (50000, ?, ?);
Fonctions scalaires et tabulaires dรฉfinies par l'utilisateur
Lorsqu'une procรฉdure exรฉcute des actions, une fonction renvoie une valeur et peut รชtre utilisรฉe dans une requรชte. SQL Script propose deux formes qui ne sont pas interchangeables.
| Paramรจtres | UDF scalaire | Tableau UDF |
|---|---|---|
| Retours de produits | Une seule valeur | Un ensemble de rรฉsultats |
| Utilisรฉ dans | Liste SELECT, clause WHERE, expressions | La clause FROM, comme un tableau |
| Peut modifier les donnรฉes | Non | Non |
| Utilisation typique | Calcul rรฉutilisable tel qu'un taux d'imposition | Vue paramรฉtrรฉe renvoyant des lignes filtrรฉes |
-- Scalar function: returns one value CREATE FUNCTION DHK_SCHEMA.ADD_BONUS (im_salary DECIMAL(15,2)) RETURNS total DECIMAL(15,2) LANGUAGE SQLSCRIPT AS BEGIN total := :im_salary * 1.10; END; SELECT EMP_NAME, DHK_SCHEMA.ADD_BONUS(SALARY) AS WITH_BONUS FROM DHK_SCHEMA.EMPLOYEE;
Une fonction de table est dรฉfinie avec RETURNS TABLE et est ensuite interrogรฉe dans la clause FROM, ce qui en fait la mรฉthode naturelle pour construire un ensemble de donnรฉes paramรฉtrรฉ et rรฉutilisable. vue de calcul ou le rapport peut consommer.
Meilleures pratiques en matiรจre de scripts SQL
Le code SQL Script est performant lorsqu'il est conรงu pour permettre au moteur de parallรฉliser le traitement, et mรฉdiocre lorsqu'il est รฉcrit comme du code applicatif. Six habitudes font toute la diffรฉrence.
- Privilรฉgiez le style dรฉclaratif au style impรฉratif. Une instruction ensembliste unique surpasse une boucle traitant les lignes une ร une, souvent de faรงon considรฉrable. N'utilisez une boucle FOR que lorsque la logique ne peut vรฉritablement pas รชtre exprimรฉe comme une opรฉration ensembliste.
- รvitez les curseurs. Ils imposent un traitement ligne par ligne et neutralisent complรจtement le moteur de calcul. Presque chaque curseur peut รชtre rรฉรฉcrit sous forme de jointure ou d'agrรฉgation.
- Veillez ร ce que les dรฉclarations restent indรฉpendantes. Deux variables de table non liรฉes entre elles sont calculรฉes en parallรจle. L'enchaรฎnement de chaque รฉtape sur la prรฉcรฉdente sรฉrialise l'ensemble de la procรฉdure.
- Dรฉclarez READS SQL DATA oรน vrai. Cela indique que la procรฉdure n'a pas d'effets secondaires, ce qui permet une optimisation plus poussรฉe.
- Filtrer le plus tรดt possible. Rรฉduire le nombre de lignes dans la premiรจre variable de tableau rรฉduit tout ce qui suit, alors que le filtrage ร la fin a dรฉjร payรฉ le coรปt.
- Abandonnez les fonctions CE_. Elles sont obsolรจtes, ne peuvent pas รชtre librement combinรฉes avec du SQL dans une mรชme instruction, et l'optimiseur SQL gรจre dรฉsormais mieux le mรชme travail.
La syntaxe au niveau des instructions est abordรฉe dans SAP HANASQL, les fonctions disponibles ร l'intรฉrieur d'une procรฉdure dans SAP Fonctions SQL HANA, et les objets de modรฉlisation qui consomment ces procรฉdures dans le SAP Modรฉlisation HANA tutoriel.
