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.

  • ๐Ÿงฉ Dรฉfinition principale : Un ensemble d'extensions SQL utilisรฉes dans les procรฉdures stockรฉes ร  la place des instructions SQL classiques.
  • ๐Ÿ“ฆ Deux conteneurs : Les procรฉdures dรฉcrivent une sรฉquence de transformations ; les fonctions dรฉfinies par lโ€™utilisateur se prรฉsentent sous forme scalaire et tabulaire.
  • ๐Ÿง  Logique dรฉclarative : Dรฉfinit les types de tables sans faire rรฉfรฉrence aux tables de la base de donnรฉes et exรฉcute des instructions SELECT ordinaires.
  • (I.e. Logique d'orchestration : Met en ล“uvre le flux de donnรฉes avec des instructions DDL, DML et de requรชte, ainsi que des boucles et des conditions.
  • ๐Ÿ”€ Logique impรฉrative : Les structures IF, ELSEIF, ELSE, CASE, les boucles FOR et la gestion des exceptions rรฉpartissent la logique entre les flux de donnรฉes.
  • ๐Ÿ“ค Sorties multiples : Contrairement ร  une procรฉdure SQL classique, une procรฉdure SQL Script renvoie plusieurs rรฉsultats via des paramรจtres OUTPUT.
  • | Exรฉcution parallรจle: Les instructions indรฉpendantes sont exรฉcutรฉes en parallรจle par le moteur de calcul.

Script SQL dans SAP HANA

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.

  1. 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.
  2. ร‰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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

FAQ

Le deux-points indique une lecture de la variable. L'รฉcrire sans deux-points ร  gauche signifie une affectation ; les deux formes permettent donc ร  l'analyseur syntaxique de distinguer l'affectation de la rรฉfรฉrence.

Non. Les opรฉrateurs de plan du moteur de calcul sont obsolรจtes. Le code existant continue de fonctionner, mais les nouveaux dรฉveloppements doivent utiliser le SQL standard, que l'optimiseur gรจre dรฉsormais au moins aussi bien.

Souvent, oui. De nombreuses boucles FOR et curseurs expriment une jointure ou une agrรฉgation de maniรจre complexe, et l'IA peut proposer l'รฉquivalent basรฉ sur les ensembles. Vรฉrifiez que le nombre de lignes correspond avant de l'adopter.

Oui. Lire le planViz trace, l'IA identifie l'instruction qui consomme le temps et dรฉtermine si les รฉtapes ont รฉtรฉ sรฉrialisรฉes par une dรฉpendance inutile entre les variables de la table.

Oui, grรขce ร  plusieurs paramรจtres de la table OUTPUT. C'est l'un des principaux avantages du script SQL par rapport ร  une procรฉdure SQL classique, qui ne peut renvoyer qu'un seul rรฉsultat.

Rรฉsumez cet article avec :