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 |