PHP ne retourne que la dernière ligne d'un resultat d'une procedure stockée ORACLE
Bonjour à tous,
Mon but est d'afficher le resultat d'une procedure sous oracle dans un tableau PHP.
Après l'avoir testé (sql plus), elle peut afficher plusieurs lignes en sortie(test de resultat sous ORACLE OK).
Donc , je me suis préssé de l'intégrer dans une source PHP (souhaintant afficher le resultat sous forme de tableau),
mais elle ne retourne que la dernière ligne resultant du procedure (donc une seule ligne).A noter que je débute sur PHP.
J'ai lu pas mal de document sur PHP/oracle en cherchant une solution similaire dans cet forum mais , le problème n'est toujours pas résolu.
En utilisant les fonctions PHP permettant d'acceder aux serveurs ORACLE les dérivées d'OCI8, le resultat reste inchangé.
voici la procedure en PL/SQL:
Code:
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
|
CREATE OR REPLACE PROCEDURE proc_SIMPLECompany
(
no_tax_payer IN NUMBER,p1 OUT SYS_REFCURSOR
)
AS
TYPE TYP_TAB_TAX_PAYER_NO IS TABLE OF CORPORATION.TAX_PAYER_NO%TYPE;
T_TAX_PAYER_NO TYP_TAB_TAX_PAYER_NO ;
Cursor C_CORPORATION is Select TAX_PAYER_NO From CORPORATION;
v_SRC FLOAT;
v_TS FLOAT := 0.3;
le_regist_name CORPORATION.REGIST_NAME%TYPE;
BEGIN
Open C_CORPORATION;
LOOP
Fetch C_CORPORATION BULK COLLECT into T_TAX_PAYER_NO;
FOR i IN T_TAX_PAYER_NO.FIRST..T_TAX_PAYER_NO.LAST
LOOP
v_SRC := func_GetSimilarityCompany(T_TAX_PAYER_NO(i),no_tax_payer);
IF (v_SRC > v_TS) then
OPEN P1 FOR SELECT REGIST_NAME
FROM CORPORATION
WHERE TAX_PAYER_NO = T_TAX_PAYER_NO(i);
END IF;
END LOOP;
Exit When C_CORPORATION%NOTFOUND ;
END LOOP;
END proc_SIMPLECompany; |
qui peut retourner plus d'une ligne.
Mais dans la partie PHP, elle n'affiche q'une ligne;
Au début j'ai essayé avec les fonctions et mais toujours la même chose.
après , on m'a dit d'utiliser la fonction
Code:
ocifetchstatement()
qui ... Retourne toutes les lignes d'un résultat Oracle
, mais une mauvaise surprise, elle a affiché le même resultat.
Et voici mon dernier code PHP:
Code:
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 40 41 42 43 44
|
<?php
set_time_limit(0);
$conn = oci_connect("user", "mdp", "//serveur/base");
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['NOT CONNECTED'], ENT_QUOTES), E_USER_ERROR);
}
$tax=196572;
$curs = OCINewCursor($conn);
$stmt = OCIParse($conn,'begin proc_SIMPLECompany(:tax,:P1); end;');
oci_bind_by_name($stmt, ':tax', $tax);
ocibindbyname($stmt, "P1", $curs, -1, OCI_B_CURSOR);
ociexecute($stmt);
ociexecute($curs);
$nrows = OCIFetchStatement($curs, $results);
if ($nrows > 0) {
echo "<table border=\"1\">\n";
echo "<tr>\n";
while (list($key, $val) = each($results)) {
print "<th>$key</th>\n";
}
print "</tr>\n";
for ($i = 0; $i < $nrows; $i++) {
reset($results);
echo "<tr>\n";
while ($column = each($results)) {
$data = $column['value'];
print "<td>$data[$i]</td>\n";
}
print "</tr>\n";
}
print "</table>\n";
} else {
print "Pas de ligne<br />\n";
}
print "$nrows Lignes lues<br />\n";
OCIFreeStatement($stmt);
OCIFreeCursor($curs);
OCILogoff($conn);
?> |
Je sais plus quoi faire, que dois-je modifier dans cet code afin que ttes les lignes soient affichées?
Est-ce que le problème se trouve vraiement sur le code PHP?
y a t'il une autre solution?
Merci pour vos aides.
je suis sous PHP5 , ORACLE 10g, windows XP sp2,navigateur mozilla firefox
Merci