La modernisation de la Base de Données DB2 for i Passage de DDS à SQL



Documents pareils
Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

Modernisation et développement d applications IBM i Technologies, outils et nouveautés 2012/2013. Volubis.fr

SQL Historique

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Bases de Données relationnelles et leurs systèmes de Gestion

Devoir Data WareHouse

Les bases de données

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

LES DONNÉES ET L'OS400. le SGBDR DB2/400

Session S12 Les bases de l optimisation SQL avec DB2 for i

Historisation des données

Le langage SQL (première partie) c Olivier Caron

OpenPaaS Le réseau social d'entreprise

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Langage SQL : créer et interroger une base

Création et Gestion des tables

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Notes de cours : bases de données distribuées et repliquées

Olivier Mondet

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

S8 - Sécurité IBM i : nouveautés 6.1 et 7.1

Les BASES de DONNEES dans WampServer

Le Langage SQL version Oracle

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Les bases de l optimisation SQL avec DB2 for i

TP Contraintes - Triggers

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Bases de données relationnelles

Cours Bases de données 2ème année IUT

Modernisation et développement d applications IBM i Technologies, outils et nouveautés 2012/2013. Volubis.fr

FileMaker 13. Guide de référence SQL

Introduction aux Bases de Données 2004/2005

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

CREATION WEB DYNAMIQUE

Le langage SQL Rappels

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Encryptions, compression et partitionnement des données

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Information utiles. webpage : Google+ : digiusto/

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

Cours Bases de données

1 Introduction et installation

PHP 5. La base de données MySql. A. Belaïd 1

Développement de base de données Microsoft SQL Server Durée : 5 jours Référence : DPSQL12. Contenu

1/ Présentation de SQL Server :

Le Langage De Description De Données(LDD)

CHAPITRE 1 ARCHITECTURE

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Jérôme FESSY. IUT de Paris 5. Base de Données. Cours Introductif. Base de Données

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

Gestion de base de données

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Intégrité des données

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Systèmes de Gestion de Bases de Données

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Programme de formation

Bases de données avancées

A QUOI SERVENT LES BASES DE DONNÉES?

Mysql avec EasyPhp. 1 er mars 2006

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Introduction au Système de Gestion de Base de Données et aux Base de Données

Bases de données Outils de gestion

Bases de SQL. Hacks 1-6 CHAPITRE UN

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Bases de données et sites WEB Licence d informatique LI345

Attaques applicatives

Administration des bases de données. Jean-Yves Antoine

Django et PostgreSQL sous la charge

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Module pour la solution e-commerce Magento

LE LANGAGE SQL2 1. INTRODUCTION

TP Bases de données réparties

Présentation Windows Azure Hadoop Big Data - BI

Stockage du fichier dans une table mysql:

Cours Base de données relationnelles. M. Boughanem, IUP STRI

1. Base de données SQLite

Présentation du PL/SQL

COMPRENDRE LES DIFFERENTS TYPES DE CONNEXION LORS DE LA

Paginer les données côté serveur, mettre en cache côté client

Configurer la supervision pour une base MS SQL Server Viadéis Services

Optimisations des SGBDR. Étude de cas : MySQL

Programme détaillé. Administrateur de Base de Données Oracle - SQLServer - MySQL. Objectifs de la formation. Les métiers

DEVAKI NEXTOBJET PRESENTATION. Devaki Nextobjects est un projet sous license GNU/Public.

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Bases de Données. Stella MARC-ZWECKER. Maître de conférences Dpt. Informatique - UdS

MS SQL Express 2005 Sauvegarde des données

Transcription:

La modernisation de la Base de Données DB2 for i Passage de DDS à SQL 16 et 17 mai 2011 IBM Forum de Bois-Colombes Session 11 Mardi 17 mai 09h00/10h30 Nathanaël BONNET GAIA Mini Systèmes nbonnet@gaia.fr

AGENDA Profitez de données plus fiables et plus accessibles grâce à SQL Comprendre les différences entre DB2 natif et DB2 SQL Comment migrer vos structures de fichiers tout en limitant les impacts sur votre existant Les difficultés de la migration de données : données non conformes et volumétrie 2

GAIA : EXPERTISE CONSEIL ET FORMATION DEPUIS 1999 NOS DOMAINES DE COMPETENCES IBM i Lotus Domino Java / Websphere Technologies Web EXPERTISES Système Migration, optimisation Développement Méthodologie, conseil, assistance technique Accompagnement Conduite du changement, support aux équipes 3

KNOW 400 : DISPOSITIF DE CAPITALISATION BASE DE CONNAISSANCES WEB WWW.KNOW400.FR 4

KNOW 400 : DISPOSITIF DE CAPITALISATION BASE DE CONNAISSANCES IBM i RPG IV, ILE, Web Services, SQL Exploitation,Système CONTENUS THEMATIQUES BASE D EXERCICES ET D EXEMPLES PARCOURS FORMATION SERVICES ASSOCIES Tutorat, formation online, conseil online WWW.KNOW400. FR 5

DB2 for i Comprendre les différences entre fichier natif et SQL 6

Vers SQL Historiquement IBM i (système 38, 36, AS400, iseries, System i ) Système de fichier QSYS Structures de fichiers propriétaires Langage propriétaire DDS Evolution de la plateforme Support de SQL Famille DB2 Particularité IBM i DB2 est intégré à l OS Equivalence gérée par l OS entre fichier natif DDS et SQL 7

Structured Query Language Le langage standard de manipulation de données Présent dans tous les SGBD Mais non portable d un SGBD a un autre Chaque éditeur «enrichissant» le standard de sa propre syntaxe ou fonctionnalité Langage ensembliste Manipule un ensemble de données De 0 à n enregistrements Contrairement à RPG Enregistrement par enregistrement La première version commerciale 1979 8

Structured Query Language C est le langage incontournable sur toutes les plateformes Sur IBM i De nombreuses évolutions au fil des ans IBM a stabilisé le DDS, seul SQL évolue Nouveaux types de donnée Nouvelles fonctionnalités 9

Structured Query Language 10

Structured Query Language SQL est composé de plusieurs langages, chacun dédié à une utilisation DML (Data Manipulation language) Permet de sélectionner, insérer, supprimer ou modifier des données dans une table (des tables) d une base de données relationnelle DDL (Data Definition Language) Permet de définir les structures de données, c est-à-dire les tables, les index et les contraintes DCL (Data Control Language) Gestion des autorisations, au niveau des objets comme au niveau colonne PL/SQL (Procedural Language) Langage de programmation SQL pour les SGBD : procédures stockées, fonctions utilisateurs, triggers SQL embarqué DML, DDL, DCL et des éléments de PL/SQL disponibles pour les langages de programmation 11

SQL sur IBM i Particularité DB2 for i Intégré à l OS Gestion d équivalent avec DB2 natif De multiples interfaces SQL Interactif (STRSQL) Exécution de scripts SQL (RUNSQLSTM) SQL embarqué Query Manager (QM) SQL interactif par iseries Navigator 12

Mais pourquoi passer de DDS à SQL? Pour des raisons humaines Il est simple de trouver une compétence SQL Moins simple pour DDS Pour des raisons de politique de développement RoadMap IBM IBM a «stabilisé» DDS, ce qui signifie que toutes les évolutions porte sur SQL Pour des raisons techniques Performances Fiabilité des données Simplicité de développement 13

DB2 for i IBM i Vocabulaire et concepts IBM i Bibliothèque Fichier physique Enregistrement Champ Logique à clé Logique sans clé Format Membre Nom = 10 caractères Journalisation DB2 for i Schéma, Collection ou BD Table Ligne Colonne Index Vue Nom = 128 caractères Catalogue Journalisation Intégrité référentielle 14

DB2 for i IBM i Une différence fondamentale WRITE 30 % INSERT PF (DDS) CONTROLE Et? CONTROLE TABLE (SQL) READ 70 % FETCH 15

DB2 for i IBM i Une autre différence DDS = compilation SQL = exécution script Objets par défaut dans *CURLIB Impacts Développement Objets Livraison Différentiel Script 16

DB2 for i IBM i Bibliothèque vs Schema/Collection Catalogue QSYS QADBXREF QSYS2 SYSTABLES COLLECTION (*LIB) CREATE COLLECTION SYSTABLES LIBRABRY (*LIB) CRTLIB 17

DB2 for i IBM i Principales vues du catalogue Nom SYSCOLUMNS SYSCHKCST SYSCST SYSCSTCOL SYSCSTDEP SYSREFCST SYSINDEXES SYSKEYS SYSKEYCST SYSTABLES SYSVIEWS Usage Colonnes des tables et index Contraintes de clés, d intégrité, de vérification Index Clés Tables et index Vues

DB2 for i IBM i Journalisation SQL Par défaut Une journal et un récepteur de journal associé sont créés automatiquement dans la collection QSQJRN (*JRN) QSQJRN0001 (*JRNRCV) Toute table créée dans une collection est journalisée Toute table créée dans une bibliothèque n est pas journalisée DDS Manuelle Aucun fichier n est journalisé 19

Et plus! IBM i SQL apporte d autres fonctionnalités Intégrité référentielle Triggers Plus de possibilités avec SQL Droits au niveau colonne XML Index EVI LOB Encryption 20

Migration des structures «Compatibilité ascendante» signifie que toutes les erreurs de conception originelles sont conservées 21

Problématique Le problème n est pas tant de créer les tables qui vont remplacer nos fichiers physiques, mais plutôt de maitriser tous les impacts Nous allons donc Etudier ces différences dans le détail Dresser la liste des usages qui posent problèmes Avec ce guide Analyse d impact de notre existant Prévoir les modifications De fichiers De programmes 22

Principe PF -> TABLE PF FIC1 A R FIC1FMT A ID 10S 0 TEXT('Clé') A DONNEES 20A TEXT('Données') A SELE 10A TEXT('Sélection') A K ID TABLE FIC1 CREATE TABLE FIC1 ( ID NUMERIC(10, 0) NOT NULL DEFAULT 0, DONNEES CHAR(20) NOT NULL DEFAULT '', SELE CHAR(10) NOT NULL DEFAULT '', PRIMARY KEY( ID ) ) ; LABEL ON TABLE FIC1 IS 'Libellé FIC1' ; LABEL ON COLUMN FIC1 ( ID TEXT IS 'Clé', DONNEES TEXT IS 'Données', SELE TEXT IS 'Sélection' ) ; 23

Principe LF -> INDEX PF FIC1L0 A R FIC1FMT PFILE(FIC1) A K ID INDEX FIC1L0 CREATE INDEX FIC1L0 ON FIC1 ( ID ) ; LABEL ON INDEX FIC1L0 IS 'Clé non unique' ; 24

Principe LF -> INDEX dérivé PF FIC1L1 A R FIC1FMT PFILE(FIC1) A K ID A S SELE COMP(EQ 'OUI') INDEX FIC1L1 CREATE INDEX FIC1L1 ON FIC1 ( ID ) WHERE SELE = 'OUI' ADD ALL COLUMNS ; LABEL ON INDEX FIC1L0 IS 'Clé non unique' ; 25

Principe LF -> VUE PF FIC13V0 A R F13FTM JFILE(FIC1 FIC3) A J JOIN(FIC1 FIC3) A JFLD(ID CLE) A ID A CLE A DONNEES Vue FIC13V0 CREATE VIEW FIC13V0 ( ID, CLE, DONNEES ) AS SELECT f1.id, f2.cle, f1.donnees FROM FIC1 AS f1 INNER JOIN FIC3 AS f2 ON ( f1.id = f2.cle ) ; LABEL ON COLUMN FIC13V0 ( ID TEXT IS 'Clé', CLE TEXT IS 'Clé', DONNEES TEXT IS 'Données' ) ; 26

Usages supportés et non supportés Types d usage RPG (carte F) SQL Sous toutes ces formes SQL embarqué QMQRY SQL interactif, RUNSQLSTM CL Les commandes relatives aux fichiers DDS OPNQRY, 27

Usages supportés et non supportés RPG (*) Carte F SQL Embarqué QMQRY Interactif, CL OPNQRYF TABLE INDEX INDEX Dérivé VUE Idem PF Idem LF Idem LF Idem LF Idem PF Non supporté Idem LF Idem PF Idem LF Non supporté Idem LF (*) Pour un même ID de niveau format entre le fichier DDS et le fichier SQL 28

Usages non supportés Modifications à apporter RPG En cas de modification du niveau de format Recompilation SQL Réécrire les requêtes qui utilisent des LF Utiliser les tables et les vues CL (OPNQRYF) Réécrire les QRY qui utilisent des LF convertis en index dérivés Utiliser les tables, index ou vue 29

Concepts non supportés par SQL Format La notion de format n existe pas en SQL Par défaut nom du format = nom de la table Un unique format possible Membre La notion de membre n existe pas en SQL Par défaut nom du membre = nom de la table Un unique membre possible CHGPF MAXMBRS(*NOMAX) provoque un CPD3213 «Nombre maximal de membres incorrect pour le fichier» 30

Concepts non supportés par SQL Clé non unique sur un PF Pour un PF, les cas suivants sont possibles Pas de clé Ordre physique Clé non unique Tri Clé unique Identifiant Pour une TABLE Pas de clé Ne devrait pas arriver Ordre physique Clé primaire ou clé unique Identifiant 31

Concepts non supportés par SQL EDTCDE Les codes éditions ne sont pas supportés par SQL Les codes éditions sont utiles dans les IHM (PRTF, DSPF) Une TABLE sert à stocker l information DATFMT, TIMFMT Même principe que EDTCDE Pour SQL, une date est une date *ISO 32

Amélioration du support Format et DATFMT/TIMFMT Pour des raisons de compatibilité, le mot-clé RCDFMT a été ajoutée à SQL Il permet d indiquer un format d enregistrement sur une table, un index ou une vue Pris en compte dans l ID de niveau de format Lorsque RCDFMT est présent Le format des zones DATE et TIME est indiqué par l option DATFMT de RUNSQLSTM *JOB par défaut Toutes les zones date sont au même format 33

Amélioration du support Format et DATFMT/TIMFMT Format Essentiel pour la compatibilité avec les programmes existants Calculé sur la base de Nom du format Nom des zones Type et longueur des zones Ordre des zones 34

Amélioration du support RCDFMT Table, vue et index TABLE FIC2 CREATE TABLE FIC2 ( ID NUMERIC(10, 0) NOT NULL DEFAULT 0, DONNEES CHAR(20) NOT NULL DEFAULT '', SELE CHAR(10) NOT NULL DEFAULT '', LASTUPD DATE NOT NULL DEFAULT CURRENT_DATE, PRIMARY KEY( ID ) ) RCDFMT FIC2FMT ; INDEX FIC2L0 CREATE INDEX FIC2L0 ON FIC2 ( DONNEES ) RCDFMT FIC2FMT ; Index dérivé A défaut de RCDFMT ou ADD ALL COLUMNS Ne contient que la clé 35

Concepts non supportés par SQL Clé non unique Clé unique Multi-membres Multi-formats Date et heure ( <> *ISO) Date et heure (Formats multiples) TABLE INDEX INDEX Dérivé Non supporté Oui Oui Non supporté Non supporté Oui (RCDFMT) Non supporté VUE Non supporté 36

DB2 for i IBM i Réutilisation d enregistrements supprimés (REUSEDLT) Par défaut SQL = *YES DDS = *NO Nécessite RGZPFM Allocation exclusive du fichier 37

Analyse d impacts Lister dans votre application, les fichiers Impact fort Multi-membres, multi-formats PF avec clé non unique Impact faible EDTCDE DATFMT et TIMFMT <> *ISO OPNQRYF (utilisation d index dérivé) SQL (utilisation de LF) Sans impact Les autres fichiers 38

Aide à l analyse d impact Fichiers multi-membres Les membres ne sont pas détaillés dans le catalogue DSPFD FILE(RECUP/*ALL) TYPE(*MBR) OUTPUT(*OUTFILE) OUTFILE(NBONNET/MBR_RECUP) Interrogation -- Liste des fichiers multi-membres select mblib, mbfile, count( mbname ) as "Nombre de membres" from nbonnet.mbr_recup group by mblib, mbfile having count(*) > 1 order by mblib, "Nombre de membres" desc ; 39

Aide à l analyse d impact Fichiers mono-membre Dont le nom du membre est différent du nom de fichier Purement informatif with mono as ( select mblib, mbfile, count( mbname ) from nbonnet.mbr_recup group by mblib, mbfile having count(*) = 1 ) select tous.mblib as "Bibliothèque", tous.mbfile as "Fichier", tous.mbname as "Membre" from nbonnet.mbr_recup tous join mono on tous.mblib = mono.mblib and tous.mbfile = mono.mbfile where tous.mbfile <> tous.mbname order by tous.mblib, tous.mbfile ; 40

Aide à l analyse d impact Fichiers multi-formats Les formats ne sont pas détaillés dans le catalogue DSPFD FILE(RECUP/*ALL) TYPE(*RCDFMT) OUTPUT(*OUTFILE) OUTFILE(NBONNET/FMT_RECUP) select rflib, rffile, count(*) from nbonnet.fmt_recup group by rflib, rffile having count(*) <> 1 order by rflib, rffile ; 41

Aide à l analyse d impact Fichiers source Nécessairement multi-membre Pour les isoler select * from qsys2.systables where file_type = 'S' and system_table_schema = 'RECUP' ; 42

Aide à l analyse d impact PF à clé non unique Les clés des PF ne sont pas contenues dans le catalogue SQL Seules les contraintes de clés sont cataloguées DSPFD FILE(RECUP/*ALL) TYPE(*ACCPTH) OUTPUT(*OUTFILE) OUTFILE(NBONNET/KEY_RECUP) select aplib "Bibliothèque", apfile "Fichier" from nbonnet.key_recup where apftyp = 'P' and -- on ne traite que les PF et les TABLE apuniq = 'Y' order by apfile ; 43

Aide à l analyse d impact EDTCDE, DATFMT/TIMFMT Les formats ne sont pas détaillés dans le catalogue DSPFFD FILE(RECUP/*ALL) OUTPUT(*OUTFILE) OUTFILE(NBONNET/COL_RECUP) EDTCDE select * from nbonnet.col_recup where whecde <> '' ; 44

Aide à l analyse d impact DATFMT <> *ISO select whlib, whfile, whfldi, whfmt, whsep from nbonnet.col_recup where whfldt in ('L', 'T') and whfmt <> '*ISO' ; DATFMT hétérogènes -- liste des zones de date et heure par fichier with lstfmtdat as ( select whlib, whfile, count( distinct whfmt ) from nbonnet.col_nbdds a where whfldt = 'L' Having count(*) > 1 group by whlib, whfile ), select tous.whlib, tous.whfile, tous.whfldi, tous.whfmt, tous.whsep from nbonnet.col_nbdds tous join lstfmtdat dat on tous.whlib = dat.whlib and tous.whfile = dat.whfile where whfldt = 'L' order by whlib, whfile, whfldi ; 45

Outils Pour vous aider dans la réécriture des structures API QSQGNDDL (Generate Data Definition Language) http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=/ apis/qsqgnddl.htm De façon plus simple System i Navigator Des commandes disponibles sur le net http://systeminetwork.com/article/retrieving-sql-definitions-dds-files (Bob Cozzi) http://jplamontre.free.fr/as400/rtvsql.htm Possibilité d automatiser dans des CL 46

System i Navigator 47

System i Navigator 48

System i Navigator 49

System i Navigator 50

System i Navigator 51

System i Navigator PF -> TABLE Pratique Génère les scripts Y compris les messages d information pour ce qui n est pas supporté Reste à adapter Nom de bibliothèque qualifiée à supprimer LF -> INDEX Génère des vues et non des index A reprendre à la main En fonction du volume de structures à reprendre Il est possible de faire une commande Analyse le LF ou interroge le catalogue Génère le script SQL pour l index 52

System i Navigator Permet l utilisation de commandes CL Un script SQL peut enchainer tout ce dont vous avez besoin! 53

Migration des données Ou comment apprendre que mes données sont incorrectes 54

Problématique DDS Les enregistrements ne sont contrôlés qu à la lecture Ce qui signifie que vous avez des données corrompues Sur les zones alphanumériques Cela ne se voit pas trop Sur les zones numériques, date Erreur lors de la lecture Insertion des données dans les tables SQL On ne va pouvoir reprendre les données corrompues Il va donc falloir en faire quelque chose C est toute la difficulté Et ce n est pas technique 55

Problématique Aspect technique Identifier les données corrompues Afin qu elles soient traitées Par des règles fonctionnelles à définir Reprendre les données valides Méthode Itérative L arbre cache la forêt 56

Problématique Itération PRODUCTION ENVIRONNEMENT DE REPRISE DDS COPIE DDS Contrôle des types de données Corrections cumulées Extraction des enregistrem ents valides Extraction des anomalies SQL Anomalies 57

Techniques de reprise Problème Manipuler des données incorrectes Provoque des anomalies dans le code Gérer les anomalies prévues Ne pas gérer les autres anomalies Quelles techniques utiliser Commandes CL, SQL? RPG Carte F SQL Avantage Carte F Permet de lire des valeurs erronées 58

RPG carte F 1/2 h dftactgrp( *no ) actgrp( *new ) datfmt( *iso ) timfmt( *iso ) // fichier contenant les données à reprendre farticle if e k disk extfile( *EXTDESC ) f extdesc( 'REPRISE/ARTICLE' ) f rename( articlf : fmtin ) // fichier des données reprises - correctes fart_sql o e k disk extfile( *EXTDESC ) f extdesc( 'REPRISE/ART_SQL' ) f rename( articlf : fmtout ) // fichier des données en anomalies fart_ano o e k disk extfile( *EXTDESC ) f extdesc( 'REPRISE/ART_ANO' ) f rename( articlf : fmtano ) // DS pour lectures/écritures d ptr_enr s * inz( %addr( enr_in ) ) d enr_in ds likerec( fmtin : *input ) d enr_out ds likerec( fmtout : *output ) d based( ptr_enr ) d enr_ano ds likerec( fmtano : *output ) d based( ptr_enr ) d enreg_banal s 50a based( ptr_enr ) // DS pour contrôle des zones d enregctl e ds extname( 'REPRISE/ARTICLE' ) d qualified // indicateur d'erreur d Lbln_Err s n inz( *off ) 59

RPG carte F 2/2 // boucle de lecture dow not %eof( article ) ; // Lecture du fichier read fmtin enr_in ; if %eof( article ) ; // sortir de la boucle de traitement leave ; endif ; // test de l'enregistrement monitor ; eval-corr enregctl = enr_in ; LBln_Err = *off ; on-error ; LBln_Err = *on ; endmon ; if not LBln_Err ; // traitement enregistrement OK write fmtout enr_out ; else ; // traitement enregistrement KO monitor ; write fmtano enr_ano ; on-error ; dsply 'Anomalie non gérable. Début de l''enreg :' ; dsply enreg_banal ; endmon; endif ; enddo ; 60

RPG SQL 1/3 h dftactgrp( *no ) actgrp( *new ) datfmt( *iso ) timfmt( *iso ) // DS pour lectures/écritures d ptr_enr s * inz( %addr( enr_in ) ) d enr_in e ds extname( 'REPRISE/ARTICLE' ) d qualified d enr_out e ds extname( 'REPRISE/ART_SQL' ) d based( ptr_enr ) d qualified // DS pour contrôle des zones d enregctl e ds extname( 'REPRISE/ARTICLE' ) d qualified // indicateur d'erreur d Lbln_Err s n inz( *off ) // Gestion des erreurs d Err_nb s 10i 0 inz d Err_msgid s 7a inz d Err_msgtxt s 256a inz d Err_sqlstate s 6a inz d Err_Cpt s 10i 0 inz d Msg s 52a inz 61

RPG SQL 2/3 // options SQL exec sql set option datfmt = *iso, commit=*none, naming = *sys ; // déclaration du curseur SQL pour lecture du fichier exec sql declare lect cursor for select * from reprise/article for fetch only ; exec sql open lect ; dow sqlcode <> 100 ; // lecture exec sql fetch from lect into :enr_in ; // test du SQLState select ; // Erreur // L'enregistrement n'a pas été lu // La DS enr_in a conservée son ancienne valeur when %subst( SqlState : 1 : 2 ) >= '03' ; // Avant toute autre instruction SQL // SQLErm est une suite de valeur alpha varying. Cela nécessiterait // une boucle ici dsply ( 'SQLErm : ' + %subst( SQLErm : 1 : 40 ) ) ; // nombre d'erreurs exec sql get diagnostics :Err_nb = NUMBER ; dsply ( 'Erreur (' + %char( Err_nb ) + ')' ) ; 62

RPG SQL 3/3 // récupérer les informations de chaque erreur for Err_Cpt = 1 to Err_nb ; // récupérer l'id de msg, le texte et le sqlstate exec sql get diagnostics condition :Err_cpt :Err_msgid = DB2_MESSAGE_ID, :Err_msgtxt = MESSAGE_TEXT, :Err_sqlstate = RETURNED_SQLSTATE ; dsply ( 'Err. ' + %char( Err_Cpt ) + ' -MsgId: ' + Err_msgid + ' -SqlState: ' + Err_sqlstate ) ; dsply %subst( Err_msgtxt : 1 : 50 ) ; endfor ; // Pas de données when %subst( SqlState : 1 : 2 ) >= '02' ; leave ; // Avertissements when %subst( SqlState : 1 : 2 ) = '01' ; dsply 'Avertissement' ; // Sinon Other ; // insertion de l'enregistrement exec sql insert into reprise/art_sql values ( :enr_in ) ; endsl ; enddo ; 63

MERCI 64