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:
qui peut retourner plus d'une ligne.
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;
Mais dans la partie PHP, elle n'affiche q'une ligne;
Au début j'ai essayé avec les fonctionset
Code : Sélectionner tout - Visualiser dans une fenêtre à part oci_fetch_array()mais toujours la même chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part oci_fetch_all()
après , on m'a dit d'utiliser la fonctionqui ... Retourne toutes les lignes d'un résultat Oracle
Code : Sélectionner tout - Visualiser dans une fenêtre à part ocifetchstatement()
, mais une mauvaise surprise, elle a affiché le même resultat.
Et voici mon dernier code PHP:
Je sais plus quoi faire, que dois-je modifier dans cet code afin que ttes les lignes soient affichées?
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); ?>
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
Partager