
|
H DFTACTGRP(*NO)
* description d'un paramètre
DsqlfpParameterDescription_t...
D DS QUALIFIED TEMPLATE
DsqlfpSqlType 5I 0
DsqlfpByteLength 10U 0
DsqlfpLength 10U 0
DsqlfpPrecision 5I 0
DsqlfpScale 5I 0
DsqlfpCcsid 5U 0
DsqlfpAllocatedLength...
D 5U 0
Dreserved1 14
D
* un paramètre
DsqlfpOptionalParameterValueD_t...
D DS QUALIFIED TEMPLATE
D sqlfpOptDescLength...
D 10I 0
D sqlfpParmDesc likeds(sqlfpParameterDescription_t)
D reserved2 12
D sqlfpParmData 32767
D
* liste des paramètres
Dfppvl DS QUALIFIED TEMPLATE
D sqlfpOptParmValueListLength...
D 10I 0
D sqlfpNumberOfOptionalParms...
D 10I 0
D sqlfpParmList likeds(
D sqlfpOptionalParameterValueD_t)
D dim(10)
D
* paramètres en entrée pour cette procédure
Dfieldproc01 PR EXTPGM('FIELDPROC1')
D fonction 5I 0
D parameter_list likeds(fppvl)
D decoded_attr likeds(sqlfpParameterDescription_t)
D decoded_data 32767
D encoded_attr likeds(sqlfpParameterDescription_t)
D encoded_data 32767
D sqlstate 5
D message 1000 varying
|
Dfieldproc01 PI D fonction 5I 0 * pas de liste de paramètres utilisée dans ce pgm D parameter_list likeds(fppvl) * données en clair D decoded_attr likeds(sqlfpParameterDescription_t) D decoded_data 32767 * données cryptées D encoded_attr likeds(sqlfpParameterDescription_t) D encoded_data 32767 * erreur SQL D sqlstate 5 D message 1000 varying D lg S 5I 0 D profil S 10 inz(*user) D transforme PR D 32767 D 32767 D 5I 0 /free select; when fonction = 8; // création // le type retourné est le même, donc copie de la définition encoded_attr= decoded_attr; when fonction = 0; // INSERT => encodage lg = decoded_attr.sqlfpLength; transforme(decoded_Data : encoded_Data : lg); when fonction = 4 ; // SELECT => decodage lg = encoded_attr.sqlfpLength; if profil = 'QSECOFR'; transforme(encoded_Data : decoded_Data : lg); else; %subst(decoded_Data:1:lg) = %subst(encoded_Data:1:lg); endif; other ; SQLSTATE = '38001'; message = 'demande inconnue'; ENDSL; *inlr = *on; /end-free * procédure de codage, inverse tous les bits,x'00 devient x'FF', etc ... * (algorithme trop simple pour utiliser en production) Ptransforme B |
D PI D data1 32767 D data2 32767 D lg 5I 0 D i S 5I 0 /free for i = 1 to lg; // la doc déconseille de crypter les espaces if %subst(data1 : i : 1) = ' '; %subst(data2:i:1) = %subst(data1:i:1); else; %subst(data2:i:1) = %bitnot(%subst(data1:i:1)); endif; ENDFOR; /end-free ptransforme E |