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.

  1. SQL Natif
  2. 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.

Rรฉsumez cet article avec :