Ouvrez SQL et SQL natif dans SAP ABAP
Le but de ce tutoriel n'est pas de vous apprendre SQL ou des concepts de bases de données mais pour vous présenter la diversité SQL dans ABAP
Dans le langage de programmation ABAP/4, deux types de SQL sont utilisés.
- SQL Natif
- OUVREZ SQL.
Open SQL vous permet d'accéder aux tables de base de données déclarées dans le dictionnaire ABAP quelle que soit la plateforme de base de données utilisée par le système R/3.
Native SQL vous permet d'utiliser des instructions SQL spécifiques à une base de données dans un programme ABAP/4. Cela signifie que vous pouvez utiliser des tables de base de données qui ne sont pas gérées par le dictionnaire ABAP, et donc intégrer des données qui ne font pas partie du système R/3.
Open SQL se compose d'un ensemble d'instructions ABAP qui effectuent des opérations sur la base de données centrale du système R/3. Les résultats des opérations et les éventuels messages d'erreur sont indépendants du système de base de données utilisé. Open SQL fournit ainsi une syntaxe et une sémantique uniformes pour tous les systèmes de base de données pris en charge par SAP. Les programmes ABAP qui utilisent uniquement des instructions Open SQL fonctionnent sur n'importe quel système R/3, quel que soit le système de base de données utilisé. Les instructions Open SQL ne peuvent fonctionner qu'avec des tables de base de données créées dans le dictionnaire ABAP.
Commandes Open SQL de base
- SELECT
- INSERT
- MISE À JOUR
- MODIFIER
- EFFACER
- OUVRIR LE CURSEUR, RÉCUPÉRER, FERMER LE CURSEUR
Exemple
TABLES SBOOK. DATA C TYPE CURSOR, WA LIKE SBOOK. OPEN CURSOR C FOR SELECT * FROM SBOOK WHERE CARRID = 'LH ' AND CONNID = '0400' AND FLDATE = '19950228' ORDER BY PRIMARY KEY. DO. FETCH NEXT CURSOR C INTO WA. IF SY-SUBRC <> 0. CLOSE CURSOR C. EXIT. ENDIF. WRITE: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE, WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT, WA-INVOICE. ENDDO.
Afficher la liste des passagers du vol Lufthansa 0400 du 28-02.1995 :
Ouvrir les codes de retour SQL
Toutes les instructions Open SQL remplissent les deux champs système suivants avec des codes retour.
SY-SUBRC
Après chaque instruction Open SQL, le champ système SY-SUBRC contient la valeur 0 si l'opération a réussi, une valeur autre que 0 sinon.
SY-DBCNT
Après une instruction Open SQL, le champ système SY-DBCNT contient le nombre de lignes de base de données traitées.
SQL natif
Comme déjà mentionné, Native SQL vous permet d'utiliser des instructions SQL spécifiques à une base de données dans un Programme ABAP.
Pour utiliser l'instruction Native SQL, vous devez la précéder de l'instruction EXEC SQL et la suivre de l'instruction ENDEXEC.
Syntaxe
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
Il n'y a pas de point après les instructions Native SQL. De plus, l'utilisation de virgules inversées («) ou d'un astérisque (*) au début d'une ligne dans une instruction SQL native n'introduit pas de commentaire comme cela se produirait dans la syntaxe ABAP normale. Vous devez savoir si les noms de tables et de champs sont sensibles à la casse dans votre choix. base de données.
Dans les instructions Native SQL, les données sont transportées entre la table de base de données et le programme ABAP à l'aide de variables hôtes. Ceux-ci sont déclarés dans le programme ABAP, et précédés dans l'instruction Native SQL par deux points (:). Vous pouvez utiliser des structures élémentaires comme variables hôtes. Exceptionnellement, les structures d'une clause INTO sont traitées comme si tous leurs champs étaient répertoriés individuellement.
Comme en Open SQL, après l'instruction ENDEXEC, SY-DBCNT contient le nombre de lignes traitées. Dans presque tous les cas, SY-SUBRC contient la valeur 0 après l'instruction ENDEXEC.
Open SQL – Règles de performances
Pour améliorer les performances du SQL et, par conséquent, du programme ABAP, il convient de respecter les règles suivantes :
Gardez l'ensemble de résultats petit
- Utiliser la clause Where
- Si un seul enregistrement est requis dans la base de données, utilisez SELECT SINGLE autant que possible.
Minimisez la quantité de données transférées
- Limiter le nombre de lignes
- Si seuls certains champs sont obligatoires dans une table, utilisez le SELECT INTO… déclaration
- Restreindre le nombre de colonnes
- Utiliser des fonctions d'agrégation
Minimisez le nombre de transferts de données
- Évitez les boucles de sélection imbriquées
- Une autre option consiste à utiliser l'instruction SELECT .. FOR ALL ENTRIES. Cette instruction peut souvent être beaucoup plus efficace que l'exécution d'un grand nombre d'instructions SELECT ou SELECT SINGLE lors d'une BOUCLE d'une table interne.
- Utiliser les vues de dictionnaire
- Utiliser les jointures dans la clause FROM
- Utiliser des sous-requêtes dans la clause Where
Minimisez les frais de recherche
- Utiliser des champs d'index dans la clause Where
- Lorsque vous accédez aux bases de données, assurez-vous toujours que l’index correct est utilisé.
Réduisez la charge de la base de données
- Bufferfaire respecter
- Bases de données logiques
- Évitez les accès répétés à la base de données
Utiliser des tables internes pour Buffer Enregistrements
- Pour éviter d'exécuter plusieurs fois le même SELECT (et donc d'avoir des sélections en double), une table interne de type HASHED peut être utilisée pour améliorer les performances.