Cobol : Connexion à Microsoft SQL Server

Dans un article précédent nous avons vu comment était réalisée la connexion à une base de données Oracle en Cobol. Nous allons maintenant voir qu’il est possible de réaliser la même chose mais sur une base de données Microsoft SQL Server. La différence avec Oracle est minime, elle se limite à la déclaration de la variable contenant l’identifiant de connexion.

Nous utiliserons toujours SQLCA pour interagir avec la base de données et tester les codes retours pour traiter les éventuelles erreurs.

EXEC SQL INCLUDE SQLCA END-EXEC.

Variables nécessaires à la connexion

Pour réaliser cette connexion, l’identifiant et le mot de passe sont renseignés dans une unique variable utilisée par la fonction CONNECT. Nous allons devoir passer par une variable intermédiaire Cobol classique qui sera découpé en 3 parties :

  • Identifiant de connexion
  • Séparateur
  • Mot de passe

Cette variable servira à alimenter la variable SQL. Le séparateur indique la limite entre l’identifiant et le mot de passe.

01   MSSQL-LOGIN.
  10   MSSQL-USER         PICTURE X(08).
  10   FILLER             PICTURE X(01) VALUE ".".
  10   MSSQL-PASS         PICTURE X(08).

On déclare ensuite les variables SQL nécessaires qui sont une chaîne de caractère reprenant l’identifiant de connexion et le nom de la base de données à laquelle on souhaite se connecter. On va déclarer une variable supplémentaire pour modifier les propriétés de la session ouverte. Pour faciliter la relecture du programme, on va utiliser le préfixe Z- pour les variables SQL.

EXEC SQL BEGIN  DECLARE SECTION    END-EXEC.
01    Z-SERVER         PICTURE X(10).
01    Z-LOGIN          PICTURE X(17).
01    Z-SQLOPT         PICTURE X(90).
EXEC SQL END    DECLARE SECTION    END-EXEC.

Demande de connexion à SQL Server

Dans cet exemple on va alimenter directement les identifiants de connexion en dur dans le code. Bien sur cette partie devra être remplacée par la lecture d’un fichier paramètre qui n’oblige pas à la recompilation de l’application si les codes sont amenés à changer.

MOVE   "MSUSER"    TO MSSQL-USER.
MOVE   "MSPASS"    TO MSSQL-PASS.

On replace maintenant le contenu de la zone groupe MSSQL-LOGIN dans la variable Z-LOGIN et on alimente le nom du serveur auquel on souhaite se connecter.

MOVE   MSSQL-LOGIN  TO    Z-LOGIN.
MOVE   "SERVEUR"    TO    Z-SERVER.
EXEC SQL    CONNECT TO   :Z-SERVER
            USER :Z-LOGIN END-EXEC.

Modification des propriétés de la session

Maintenant que la connexion à SQL Server est faite, on va modifier les propriétés de la session. On va pour cela utiliser la variable banalisée Z-SQLOPT déclarée en working.

Définir un format de date par défaut

On va commencer par utiliser les dates au format YYYY-MM-DD. L’avantage de ce format est de pouvoir comparer les dates comme des chaînes de caractères.

MOVE        "SET DATEFORMAT YMD"   TO     Z-SQLOPT.
EXEC SQL    EXECUTE IMMEDIATE :Z-SQLOPT           END-EXEC.

Désactiver les transactions implicites

Afin de pas gérer les COMMIT et ROLLBACK pour valider un ensemble de requêtes, on va désactiver les transactions implicites. Ainsi les mises à jour des données seront prises en compte immédiatement.

MOVE        "SET IMPLICIT_TRANSACTIONS OFF"    TO    Z-SQLOPT.
EXEC SQL    EXECUTE IMMEDIATE :Z-SQLOPT           END-EXEC.

La gestion des erreurs n’a pas été abordé ici, il convient bien sur de tester que toutes les commandes envoyées à la base de données se sont déroulées sans erreurs.

Laisser un commentaire