Sunteți pe pagina 1din 64

IBM i

La modernisation de la Base de Donnes DB2 for i


Passage de DDS SQL
16 et 17 mai 2011 IBM Forum de Bois-Colombes
Session 11 Mardi 17 mai 09h00/10h30
Nathanal BONNET GAIA Mini Systmes nbonnet@gaia.fr

GAIA 2011

IBM i

AGENDA

Profitez de donnes plus fiables et plus


accessibles grce SQL
Comprendre les diffrences entre DB2 natif
et DB2 SQL
Comment migrer vos structures de fichiers
tout en limitant les impacts sur votre
existant
Les difficults de la migration de donnes :
donnes non conformes et volumtrie

GAIA 2011

IBM i

GAIA : EXPERTISE CONSEIL ET FORMATION DEPUIS 1999


NOS DOMAINES DE COMPETENCES

IBM i
Lotus Domino
Java / Websphere
Technologies Web

EXPERTISES
Systme
Migration, optimisation

Dveloppement
Mthodologie, conseil, assistance technique

Accompagnement
Conduite du changement, support aux quipes

GAIA 2011

IBM i

KNOW 400 : DISPOSITIF DE CAPITALISATION


BASE DE CONNAISSANCES WEB

WWW.KNOW400.FR

GAIA 2011

IBM i

KNOW 400 : DISPOSITIF DE CAPITALISATION


BASE DE CONNAISSANCES IBM i
RPG IV, ILE, Web Services, SQL
Exploitation,Systme

CONTENUS THEMATIQUES
BASE DEXERCICES ET DEXEMPLES
PARCOURS FORMATION
SERVICES ASSOCIES
Tutorat, formation online, conseil online

WWW.KNOW400. FR
5

GAIA 2011

IBM i

DB2 for i

Comprendre les diffrences entre fichier natif et SQL

GAIA 2011
6

IBM i

Vers SQL
Historiquement

IBM i (systme 38, 36, AS400, iSeries, System i )


Systme de fichier QSYS
Structures de fichiers propritaires
Langage propritaire
DDS

Evolution de la plateforme
Support de SQL
Famille DB2

Particularit IBM i
DB2 est intgr lOS
Equivalence gre par lOS entre fichier natif DDS et SQL
7

GAIA 2011

IBM i

Structured Query Language


Le langage standard de manipulation de donnes

Prsent dans tous les SGBD


Mais non portable dun SGBD a un autre
Chaque diteur enrichissant le standard de sa propre syntaxe ou
fonctionnalit

Langage ensembliste
Manipule un ensemble de donnes
De 0 n enregistrements

Contrairement RPG
Enregistrement par enregistrement

La premire version commerciale


1979
8

GAIA 2011

IBM i

Structured Query Language


Cest 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 donne
Nouvelles fonctionnalits

GAIA 2011

IBM i

Structured Query Language

10

GAIA 2011

IBM i

Structured Query Language


SQL est compos de plusieurs langages, chacun ddi une utilisation
DML (Data Manipulation language)
Permet de slectionner, insrer, supprimer ou modifier des donnes dans une
table (des tables) dune base de donnes relationnelle

DDL (Data Definition Language)


Permet de dfinir les structures de donnes, cest--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 : procdures stockes, fonctions
utilisateurs, triggers

SQL embarqu
DML, DDL, DCL et des lments de PL/SQL disponibles pour les langages de
programmation

11

GAIA 2011

IBM i

SQL sur IBM i


Particularit DB2 for i
Intgr lOS
Gestion dquivalent avec DB2 natif

De multiples interfaces

12

SQL Interactif (STRSQL)


Excution de scripts SQL (RUNSQLSTM)
SQL embarqu
Query Manager (QM)
SQL interactif par iSeries Navigator

GAIA 2011

IBM i

Mais pourquoi passer de DDS SQL ?


Pour des raisons humaines
Il est simple de trouver une comptence SQL
Moins simple pour DDS

Pour des raisons de politique de dveloppement


RoadMap IBM
IBM a stabilis DDS, ce qui signifie que toutes les volutions porte
sur SQL

Pour des raisons techniques


Performances
Fiabilit des donnes
Simplicit de dveloppement

13

GAIA 2011

IBM i

DB2 for i
Vocabulaire et concepts
IBM i

DB2 for i

Bibliothque

Schma, Collection ou BD

Fichier physique

Table

Enregistrement

Ligne

Champ

Colonne

Logique cl

Index

Logique sans cl

Vue

Format
Membre
Nom = 10 caractres

Nom = 128 caractres


Catalogue

Journalisation

Journalisation
Intgrit rfrentielle

14

GAIA 2011

IBM i

DB2 for i
Une diffrence fondamentale

30 %

WRITE

INSERT

CONTROLE

PF (DDS)
Et ?
CONTROLE

READ

15

TABLE (SQL)

70 %

FETCH

GAIA 2011

IBM i

DB2 for i
Une autre diffrence
DDS = compilation
SQL = excution script
Objets par dfaut dans *CURLIB

Impacts
Dveloppement
Objets

Livraison
Diffrentiel
Script

16

GAIA 2011

IBM i

DB2 for i
Bibliothque vs Schema/Collection
Catalogue

QSYS
QADBXREF

QSYS2
SYSTABLES

COLLECTION
(*LIB)
CREATE COLLECTION
17

SYSTABLES

LIBRABRY
(*LIB)
CRTLIB
GAIA 2011

IBM i

DB2 for i
Principales vues du catalogue
Nom

Usage

SYSCOLUMNS

Colonnes des tables et index

SYSCHKCST
SYSCST
SYSCSTCOL
SYSCSTDEP
SYSREFCST

Contraintes de cls, dintgrit, de vrification

SYSINDEXES

Index

SYSKEYS
SYSKEYCST

Cls

SYSTABLES

Tables et index

SYSVIEWS

Vues

GAIA 2011

IBM i

DB2 for i
Journalisation
SQL
Par dfaut
Une journal et un rcepteur de journal associ sont crs
automatiquement dans la collection
QSQJRN (*JRN)
QSQJRN0001 (*JRNRCV)

Toute table cre dans une collection est journalise


Toute table cre dans une bibliothque nest pas journalise

DDS
Manuelle
Aucun fichier nest journalis

19

GAIA 2011

IBM i

Et plus !
SQL apporte dautres fonctionnalits
Intgrit rfrentielle
Triggers
Plus de possibilits avec SQL

20

Droits au niveau colonne


XML
Index EVI
LOB
Encryption

GAIA 2011

IBM i

Migration des structures

Compatibilit ascendante signifie que toutes les erreurs de


conception originelles sont conserves

GAIA 2011
21

IBM i

Problmatique
Le problme nest pas tant de crer les tables qui vont
remplacer nos fichiers physiques, mais plutt de maitriser
tous les impacts
Nous allons donc
Etudier ces diffrences dans le dtail
Dresser la liste des usages qui posent problmes

Avec ce guide
Analyse dimpact de notre existant
Prvoir les modifications
De fichiers
De programmes

22

GAIA 2011

IBM i

Principe PF -> TABLE


PF FIC1
A
A
A
A
A

R FIC1FMT
ID
DONNEES
SELE
K ID

10S 0
20A
10A

TEXT('Cl')
TEXT('Donnes')
TEXT('Slection')

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 'Donnes' ,
SELE TEXT IS 'Slection' ) ;

23

GAIA 2011

IBM i

Principe LF -> INDEX


PF FIC1L0
A
A

R FIC1FMT
K ID

PFILE(FIC1)

INDEX FIC1L0
CREATE INDEX FIC1L0 ON FIC1 ( ID ) ;
LABEL ON INDEX FIC1L0
IS 'Cl non unique' ;

24

GAIA 2011

IBM i

Principe LF -> INDEX driv


PF FIC1L1
A
A
A

R FIC1FMT
K ID
S SELE

PFILE(FIC1)
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

GAIA 2011

IBM i

Principe LF -> VUE


PF FIC13V0
A
A
A
A
A
A

R F13FTM
J

JFILE(FIC1 FIC3)
JOIN(FIC1 FIC3)
JFLD(ID CLE)

ID
CLE
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 'Donnes' ) ;

26

GAIA 2011

IBM i

Usages supports et non supports


Types dusage
RPG (carte F)
SQL
Sous toutes ces formes
SQL embarqu
QMQRY
SQL interactif, RUNSQLSTM

CL
Les commandes relatives aux fichiers DDS
OPNQRY,

27

GAIA 2011

IBM i

Usages supports et non supports

RPG (*)
Carte F

TABLE

INDEX

INDEX
Driv

VUE

Idem PF

Idem LF

Idem LF

Idem LF

SQL
Embarqu
QMQRY
Interactif,

CL
OPNQRYF

Idem PF

Idem PF

Non support

Idem LF

Non support

Idem LF

Idem LF

(*) Pour un mme ID de niveau format entre le fichier DDS et le fichier SQL

28

GAIA 2011

IBM i

Usages non supports


Modifications apporter
RPG
En cas de modification du niveau de format
Recompilation

SQL
Rcrire les requtes qui utilisent des LF
Utiliser les tables et les vues

CL (OPNQRYF)
Rcrire les QRY qui utilisent des LF convertis en index drivs
Utiliser les tables, index ou vue

29

GAIA 2011

IBM i

Concepts non supports par SQL


Format
La notion de format nexiste pas en SQL
Par dfaut
nom du format = nom de la table

Un unique format possible

Membre
La notion de membre nexiste pas en SQL
Par dfaut
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

GAIA 2011

IBM i

Concepts non supports 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

GAIA 2011

IBM i

Concepts non supports par SQL


EDTCDE
Les codes ditions ne sont pas supports par SQL
Les codes ditions sont utiles dans les IHM (PRTF, DSPF)
Une TABLE sert stocker linformation

DATFMT, TIMFMT
Mme principe que EDTCDE
Pour SQL, une date est une date
*ISO

32

GAIA 2011

IBM i

Amlioration du support
Format et DATFMT/TIMFMT
Pour des raisons de compatibilit, le mot-cl RCDFMT a t ajoute
SQL
Il permet dindiquer un format denregistrement sur une table, un
index ou une vue
Pris en compte dans lID de niveau de format

Lorsque RCDFMT est prsent


Le format des zones DATE et TIME est indiqu par loption DATFMT de
RUNSQLSTM
*JOB par dfaut
Toutes les zones date sont au mme format

33

GAIA 2011

IBM i

Amlioration du support
Format et DATFMT/TIMFMT
Format
Essentiel pour la compatibilit avec les programmes existants
Calcul sur la base de

34

Nom du format
Nom des zones
Type et longueur des zones
Ordre des zones

GAIA 2011

IBM i

Amlioration du support
RCDFMT
Table, vue et index
TABLE FIC2
CREATE TABLE FIC2 (
ID
NUMERIC(10, 0) NOT NULL DEFAULT
DONNEES CHAR(20)
NOT NULL DEFAULT
SELE
CHAR(10)
NOT NULL DEFAULT
LASTUPD DATE
NOT NULL DEFAULT
PRIMARY KEY( ID ) )
RCDFMT FIC2FMT ;

0 ,
'' ,
'' ,
CURRENT_DATE ,

INDEX FIC2L0
CREATE INDEX FIC2L0 ON FIC2 ( DONNEES )
RCDFMT FIC2FMT ;

Index driv
A dfaut de RCDFMT ou ADD ALL COLUMNS
Ne contient que la cl

35

GAIA 2011

IBM i

Concepts non supports par SQL


TABLE
Cl non unique
Cl unique

36

INDEX

Non
support

INDEX
Driv
Oui

Oui

Multi-membres

Non support

Multi-formats

Non support

Date et heure
( <> *ISO)

Oui (RCDFMT)

Date et heure
(Formats multiples)

Non support

VUE

Non
support

GAIA 2011

IBM i

DB2 for i
Rutilisation denregistrements supprims (REUSEDLT)
Par dfaut
SQL = *YES
DDS = *NO

Ncessite RGZPFM
Allocation exclusive du fichier

37

GAIA 2011

IBM i

Analyse dimpacts
Lister dans votre application, les fichiers

Impact
fort

Impact
faible

Sans
impact

38

Multi-membres, multi-formats
PF avec cl non unique

EDTCDE
DATFMT et TIMFMT <> *ISO
OPNQRYF (utilisation dindex driv)
SQL (utilisation de LF)

Les autres fichiers

GAIA 2011

IBM i

Aide lanalyse dimpact


Fichiers multi-membres
Les membres ne sont pas dtaills 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

GAIA 2011

IBM i

Aide lanalyse dimpact


Fichiers mono-membre
Dont le nom du membre est diffrent 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 "Bibliothque" ,
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

GAIA 2011

IBM i

Aide lanalyse dimpact


Fichiers multi-formats
Les formats ne sont pas dtaills 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

GAIA 2011

IBM i

Aide lanalyse dimpact


Fichiers source
Ncessairement multi-membre
Pour les isoler
select *
from qsys2.systables
where file_type = 'S' and
system_table_schema = 'RECUP' ;

42

GAIA 2011

IBM i

Aide lanalyse dimpact


PF cl non unique
Les cls des PF ne sont pas contenues dans le catalogue SQL
Seules les contraintes de cls sont catalogues
DSPFD FILE(RECUP/*ALL) TYPE(*ACCPTH) OUTPUT(*OUTFILE)
OUTFILE(NBONNET/KEY_RECUP)
select aplib "Bibliothque",
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

GAIA 2011

IBM i

Aide lanalyse dimpact


EDTCDE, DATFMT/TIMFMT
Les formats ne sont pas dtaills dans le catalogue
DSPFFD FILE(RECUP/*ALL) OUTPUT(*OUTFILE)
OUTFILE(NBONNET/COL_RECUP)

EDTCDE
select *
from nbonnet.col_recup
where whecde <> '' ;

44

GAIA 2011

IBM i

Aide lanalyse dimpact


DATFMT <> *ISO
select whlib, whfile, whfldi, whfmt, whsep
from nbonnet.col_recup
where whfldt in ('L', 'T') and
whfmt <> '*ISO' ;

DATFMT htrognes
-- 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

GAIA 2011

IBM i

Outils
Pour vous aider dans la rcriture des structures
API QSQGNDDL (Generate Data Definition Language)
http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=/
apis/qsqgnddl.htm

De faon 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 dautomatiser dans des CL

46

GAIA 2011

IBM i

System i Navigator

47

GAIA 2011

IBM i

System i Navigator

48

GAIA 2011

IBM i

System i Navigator

49

GAIA 2011

IBM i

System i Navigator

50

GAIA 2011

IBM i

System i Navigator

51

GAIA 2011

IBM i

System i Navigator
PF -> TABLE
Pratique
Gnre les scripts
Y compris les messages dinformation pour ce qui nest pas support

Reste adapter
Nom de bibliothque qualifie supprimer

LF -> INDEX
Gnre 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
Gnre le script SQL pour lindex

52

GAIA 2011

IBM i

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

53

GAIA 2011

IBM i

Migration des donnes

Ou comment apprendre que mes donnes sont incorrectes

GAIA 2011
54

IBM i

Problmatique
DDS
Les enregistrements ne sont contrls qu la lecture
Ce qui signifie que vous avez des donnes corrompues
Sur les zones alphanumriques
Cela ne se voit pas trop

Sur les zones numriques, date


Erreur lors de la lecture

Insertion des donnes dans les tables SQL


On ne va pouvoir reprendre les donnes corrompues
Il va donc falloir en faire quelque chose
Cest toute la difficult
Et ce nest pas technique

55

GAIA 2011

IBM i

Problmatique
Aspect technique
Identifier les donnes corrompues
Afin quelles soient traites
Par des rgles fonctionnelles dfinir

Reprendre les donnes valides

Mthode
Itrative
Larbre cache la fort

56

GAIA 2011

IBM i

Problmatique
Itration
PRODUCTION

ENVIRONNEMENT DE REPRISE
COPIE

DDS

DDS

Contrle des
types de
donnes

Corrections
cumules

Extraction
des
enregistrem
ents valides
Extraction des
anomalies

SQL

57

Anomalies

GAIA 2011

IBM i

Techniques de reprise
Problme
Manipuler des donnes incorrectes
Provoque des anomalies dans le code
Grer les anomalies prvues
Ne pas grer les autres anomalies

Quelles techniques utiliser


Commandes CL, SQL ?
RPG
Carte F
SQL

Avantage
Carte F
Permet de lire des valeurs errones
58

GAIA 2011

IBM i

RPG carte F 1/2


h dftactgrp( *no ) actgrp( *new ) datfmt( *iso ) timfmt( *iso )
// fichier contenant les donnes reprendre
farticle
if
e
k disk
extfile( *EXTDESC )
f
extdesc( 'REPRISE/ARTICLE' )
f
rename( articlf : fmtin )
// fichier des donnes reprises - correctes
fart_sql
o
e
k disk
extfile( *EXTDESC )
f
extdesc( 'REPRISE/ART_SQL' )
f
rename( articlf : fmtout )
// fichier des donnes en anomalies
fart_ano
o
e
k disk
extfile( *EXTDESC )
f
extdesc( 'REPRISE/ART_ANO' )
f
rename( articlf : fmtano )

d
d
d
d
d
d

// DS pour lectures/critures
ptr_enr
s
enr_in
ds
enr_out
ds
enr_ano

d enreg_banal

ds

50a

// DS pour contrle des zones


d enregCtl
e ds
d
// indicateur d'erreur
d Lbln_Err
s

59

inz( %addr( enr_in ) )


likerec( fmtin : *input )
likerec( fmtout : *output )
based( ptr_enr )
likerec( fmtano : *output )
based( ptr_enr )
based( ptr_enr )

extname( 'REPRISE/ARTICLE' )
qualified

inz( *off )

GAIA 2011

IBM i

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 grable. Dbut de l''enreg :' ;
dsply enreg_banal ;
endmon;
endif ;
enddo ;
60

GAIA 2011

IBM i

RPG SQL 1/3

h dftactgrp( *no ) actgrp( *new ) datfmt( *iso ) timfmt( *iso )


// DS pour lectures/critures
d ptr_enr
s
d enr_in
e ds
d
d enr_out
e ds
d
d

// DS pour contrle des zones


d enregCtl
e ds
d
// indicateur d'erreur
d Lbln_Err
s

d
d
d
d
d

// Gestion des erreurs


Err_nb
s
Err_msgid
s
Err_msgtxt
s
Err_sqlstate
s
Err_Cpt
s

d Msg

61

inz( %addr( enr_in ) )


extname( 'REPRISE/ARTICLE'
qualified
extname( 'REPRISE/ART_SQL'
based( ptr_enr )
qualified

)
)

extname( 'REPRISE/ARTICLE' )
qualified

inz( *off )

10i 0 inz
7a
inz
256a
inz
6a
inz
10i 0 inz
52a

inz

GAIA 2011

IBM i

RPG SQL 2/3


// options SQL
exec sql set option datfmt = *iso ,
commit=*none ,
naming = *sys ;
// dclaration 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 conserve son ancienne valeur
when %subst( SqlState : 1 : 2 ) >= '03' ;
// Avant toute autre instruction SQL
// SQLErm est une suite de valeur alpha varying. Cela ncessiterait
// 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

GAIA 2011

IBM i

RPG SQL 3/3


// rcuprer les informations de chaque erreur
for Err_Cpt = 1 to Err_nb ;
// rcuprer 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 donnes
when %subst( SqlState : 1 : 2 ) >= '02' ;
leave ;
// Avertissements
when %subst( SqlState : 1 : 2 )
dsply 'Avertissement' ;

= '01' ;

// Sinon
Other ;
// insertion de l'enregistrement
exec sql insert into reprise/art_sql
values ( :enr_in ) ;
endsl ;
enddo ;

63

GAIA 2011

IBM i

MERCI

GAIA 2011
64

S-ar putea să vă placă și