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 : 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
 
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 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 : 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
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