Bonjour,
Je ne suis pas certain de poster au bon endroit, j'ai posté là où bon me semblait, désolé si ce n'était pas le meilleur endroit pour cette problématique.
Ma problématique est la suivante :
Je suis dans une application PHP (j'utilise notamment ZEND) et j'ai besoin depuis php d'appeler une procédure SQL située sur un système iSeries (AS400) dans une base de données DB2. Ma problématique se situe au niveau du passage de paramètres. Ma procédure SQL est déclarée avec 2 paramètres, 1 premier paramètre en entrée de type char (qui ne pose pas de problèmes), et un deuxième paramètre en entrée/sortie de type int (que je n'arrive pas à gérer). Je n'ai pas réussi à mettre la main sur une doc ou un bout de code mettant en oeuvre un passage de paramètre de type int dans ce cadre.
Voici le code :
côté php :
j'ai mis en gras la ligne qui me pose problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 public function createListeDiffusion($idDemande) { //initialisation du code retour à 0 $cdret = 0; $conn = i5_connect($this->_machine, $this->_uid, $this->_pwd, $this->_connOptions); if ($conn == false) die("<br>Connection Error. Errornumber = ".i5_errno()." msg = ".i5_errormsg())."<br>"; $sql = "CALL A_LstCA(? , ?)"; $stmt= i5_prepare($sql); if ($stmt == false) die("<br>prepare error. Error number =".i5_errno()."msg=".i5_errormsg()); $ret = i5_paramdesc($stmt, I5_TYPE_CHAR, 0, 26, 0, I5_IN); if ($ret == false) die("<br>paramdesc '0' error. Error number =".i5_errno()."msg=".i5_errormsg()); $ret = i5_setparam($stmt, 0, $idDemande); if ($ret == false) die("<br>setparam '0' error. Error number =".i5_errno()."msg=".i5_errormsg()); // QUE DOIS JE METTRE ??? $ret = i5_paramdesc($stmt, I5_TYPE_INT, 0, 9, 0, I5_INOUT); if ($ret == false) die("<br>paramdesc '1' error. Error number =".i5_errno()."msg=".i5_errormsg()); $ret = i5_setparam($stmt, 1, $cdret); if ($ret == false) die("<br>setparam '1' error. Error number =".i5_errno()."msg=".i5_errormsg()); $result = i5_execute($stmt ); if($result == false) echo "Execute Error:". i5_errno()." Msg:".i5_errormsg()."<br>"; return; }
$ret = i5_paramdesc($stmt, I5_TYPE_INT, 0, 9, 0, I5_INOUT)
pour le type char pas de problème par contre je trouvé aucun exemple avec le type "I5_TYPE_INT" et c'est les paramètres 3, 4 et 5 de i5_paramdesc qui me pose problème car je ne sais pas quelles valeurs assigner, ils représentent respectivement :
3-Sequence – Parameter sequential number (starting from 0)
4-Length – Parameter length
5-Decimals – Number of decimal position for the numeric parameter type
j'obtiens le code erreur -180 et le SQLState : 22007 soit :
-180
THE DATE, TIME, OR TIMESTAMP VALUE value IS INVALID
Explanation
The length or string representation of a DATE, TIME, or TIMESTAMP value does not conform to any valid format.
The value can contain one of the following:
For a host variable, the position number of the input host variable. If the position number cannot be determined, a blank is displayed.
For a character string constant, the character string constant. The maximum length that is displayed is the length of SQLERRM.
For a character column, the column name. If the column is a VIEW column and it has a corresponding base column, the VIEW column name is displayed. If the column is a VIEW column but it does not have a corresponding base column, a string of '*N' is displayed.
Otherwise, value is a string of '*N'.
System action
The statement cannot be processed.
Programmer response
Correct the program to ensure the specified value conforms to the syntax of DATE, TIME, and TIMESTAMP. Refer to SQL Reference for a list of valid DATE and TIME formats.
SQLSTATE
22007
côté iSeries (AS400) DB2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Create Procedure A_LstCA ( In P_IdDemd Char(26) , InOut P_CdRet Int ) Language SQL Modifies SQL DATA Begin [...] End;
Si quelqu'un trouve la réponse je dis chapeau![]()
Partager