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 A 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 :
Retour Open SQL Codes
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.
