Posté : mer. 21 nov. 2018, 11:09:06
Bonjour,
J'ai créé le RPG PDFBLOB suivant :
D BLOBData S SQLTYPE(BLOB_LOCATOR)
D BLOBFile S SQLTYPE(BLOB_FILE)
* Paramètres en entrée
D pFileName S 255 Varying
* Paramètres en sortie
D pBLOBData S Like(BLOBdata)
* Les indicateurs de colonnes SQL de 1 a N (Autant que de colonnes) en entrée
D pFileNameInd S 5I 0
* Les indicateurs de colonnes SQL de 1 a N (Autant que de colonnes) en sortie
D pBLOBDataInd S 5I 0
* Parametres Echange SQL (Fixe)
D pSQLState S 5
D pFunctionName S 139
D pSpecificName S 128
D pMsgText S 70 Varying
*
C *entry plist
* Les paramètres en entrée
C parm pFileName
* Les paramètres en sortie
C parm pBLOBData
* Les indicateurs de colonnes SQL de 1 a N (Autant que de colonnes) en entrée
C parm pFileNameInd
* Les indicateurs de colonnes SQL de 1 a N (Autant que de colonnes) en sortie
C parm pBLOBDataInd
* Parametre Echange SQL (Fixe)
C parm pSQLState
C parm pFunctionName
C parm pSpecificName
C parm pMsgText
exec sql Set Option
Commit = *None;
BLOBfile_fo = SQFRD;
BLOBfile_name = pFileName;
BLOBfile_nl = %Len(pFileName);
exec sql
Set :BlobData=:BlobFile;
Select;
* Fichier non trouvé- Renvoie Null
When SQLSTT='428A1';
pBLOBDataInd=-1;
* Autre erreur
When SQLSTT<>'00000';
pSQLState=SQLSTT;
pMsgText=%Subst(SQLErM:1:SQLErL);
Other;
* OK - Renvoi de la donnée
pBLOBDataInd=*Zero;
pBLOBData=BLOBdata;
EndSl;
Return;
Et la fonction table ci-dessous :
CREATE FUNCTION PDFBLOB (
EXPFILE VARCHAR(255)
)
RETURNS BLOB AS LOCATOR
LANGUAGE RPGLE
PARAMETER STYLE SQL
EXTERNAL
READS SQL DATA
DETERMINISTIC
RETURNS NULL ON NULL INPUT
Lorsque j'exécute la fonction table depuis un requeteur SQL, elle fonctionne correctement.
VALUES PDFBLOB('/home/CSV/Fichier.pdf')
ou
SELECT PDFBLOB('/home/CSV/Fichier.pdf') FROM UnFichier
Mon problème est le suivant : lorsque je souhaite exécuter cette fonction table dans un RPG, j'ai les erreurs suivantes :
SQLCODE = -305 et SQLSTATE = 22002
Ctl-opt datfmt(*ymd) datedit(*ymd) actgrp(*caller);
D rfdocu s SQLTYPE(BLOB_LOCATOR)
D rfdocui s 5I 0
D rfreto s 1
D rfmess s 80
Dcl-s wwnpdf char(20);
Dcl-s wwcpdf char(100);
Dcl-s wwpdf char(120);
exec sql Set Option
Naming = *Sys,
//Commit = *None,
UsrPrf = *User,
DynUsrPrf = *User,
Datfmt = *iso,
CloSqlCsr = *EndMod;
wwpdf ='/home/CSV/Fichier.pdf';
Exec Sql
set :rfdocu = PDFBLOB(:wwpdf);
If %Subst(SqlState:1:2) >= '02';
rfreto = '7';
rfmess = 'Erreur lors de la génération du BLOB.';
EndIf;
*inlr = *on;
return;
Merci d'avance pour vos idées
J'ai créé le RPG PDFBLOB suivant :
D BLOBData S SQLTYPE(BLOB_LOCATOR)
D BLOBFile S SQLTYPE(BLOB_FILE)
* Paramètres en entrée
D pFileName S 255 Varying
* Paramètres en sortie
D pBLOBData S Like(BLOBdata)
* Les indicateurs de colonnes SQL de 1 a N (Autant que de colonnes) en entrée
D pFileNameInd S 5I 0
* Les indicateurs de colonnes SQL de 1 a N (Autant que de colonnes) en sortie
D pBLOBDataInd S 5I 0
* Parametres Echange SQL (Fixe)
D pSQLState S 5
D pFunctionName S 139
D pSpecificName S 128
D pMsgText S 70 Varying
*
C *entry plist
* Les paramètres en entrée
C parm pFileName
* Les paramètres en sortie
C parm pBLOBData
* Les indicateurs de colonnes SQL de 1 a N (Autant que de colonnes) en entrée
C parm pFileNameInd
* Les indicateurs de colonnes SQL de 1 a N (Autant que de colonnes) en sortie
C parm pBLOBDataInd
* Parametre Echange SQL (Fixe)
C parm pSQLState
C parm pFunctionName
C parm pSpecificName
C parm pMsgText
exec sql Set Option
Commit = *None;
BLOBfile_fo = SQFRD;
BLOBfile_name = pFileName;
BLOBfile_nl = %Len(pFileName);
exec sql
Set :BlobData=:BlobFile;
Select;
* Fichier non trouvé- Renvoie Null
When SQLSTT='428A1';
pBLOBDataInd=-1;
* Autre erreur
When SQLSTT<>'00000';
pSQLState=SQLSTT;
pMsgText=%Subst(SQLErM:1:SQLErL);
Other;
* OK - Renvoi de la donnée
pBLOBDataInd=*Zero;
pBLOBData=BLOBdata;
EndSl;
Return;
Et la fonction table ci-dessous :
CREATE FUNCTION PDFBLOB (
EXPFILE VARCHAR(255)
)
RETURNS BLOB AS LOCATOR
LANGUAGE RPGLE
PARAMETER STYLE SQL
EXTERNAL
READS SQL DATA
DETERMINISTIC
RETURNS NULL ON NULL INPUT
Lorsque j'exécute la fonction table depuis un requeteur SQL, elle fonctionne correctement.
VALUES PDFBLOB('/home/CSV/Fichier.pdf')
ou
SELECT PDFBLOB('/home/CSV/Fichier.pdf') FROM UnFichier
Mon problème est le suivant : lorsque je souhaite exécuter cette fonction table dans un RPG, j'ai les erreurs suivantes :
SQLCODE = -305 et SQLSTATE = 22002
Ctl-opt datfmt(*ymd) datedit(*ymd) actgrp(*caller);
D rfdocu s SQLTYPE(BLOB_LOCATOR)
D rfdocui s 5I 0
D rfreto s 1
D rfmess s 80
Dcl-s wwnpdf char(20);
Dcl-s wwcpdf char(100);
Dcl-s wwpdf char(120);
exec sql Set Option
Naming = *Sys,
//Commit = *None,
UsrPrf = *User,
DynUsrPrf = *User,
Datfmt = *iso,
CloSqlCsr = *EndMod;
wwpdf ='/home/CSV/Fichier.pdf';
Exec Sql
set :rfdocu = PDFBLOB(:wwpdf);
If %Subst(SqlState:1:2) >= '02';
rfreto = '7';
rfmess = 'Erreur lors de la génération du BLOB.';
EndIf;
*inlr = *on;
return;
Merci d'avance pour vos idées