Christian Seiler: Code für PHP ändern

Beitrag lesen

Hallo,

DECLARE
  P_C VARCHAR2(200);
  P_ID NUMBER;
  P_OUT VARCHAR2(200);

BEGIN
  P_C := '41795849067';
  P_ID := 1;
  P_OUT := NULL;

DB_KDB.V5 ( P_C, P_ID, P_OUT );

DBMS_OUTPUT.Put_Line('P_OUT = ' || P_OUT);

COMMIT;
END;

Hab jetzt gerade kein Oracle installiert zum testen (und auch nicht die Zeit, das zu tun ;-)), aber meines Wissens kannst Du den ganzen Krempel oben an OCIParse übergeben (da BEGIN/END verwendet werden - allerdings bin ich mir nicht 100%ig sicher, da Du auch DECLARE verwendest):

$stmt = [link:http://de3.php.net/OCIParse@title=OCIParse]($connection,  
  '[code lang=sql]DECLARE  
    P_C VARCHAR2(200);  
    P_ID NUMBER;  
    P_OUT VARCHAR2(200);  
  
  BEGIN  
    P_C := 
~~~\'41795849067\'~~~sql
;  
    P_ID := 1;  
    P_OUT := NULL;  
  
    DB_KDB.V5 ( P_C, P_ID, P_OUT );  
  
    DBMS_OUTPUT.Put_Line(
~~~\'P\_OUT = \'~~~sql
 || P_OUT);  
  
    COMMIT;  
  END;
~~~');  
$res = [OCIExecute](http://de3.php.net/OCIExecute)($stmt);[/code]  
(`$connection`{:.language-php} ist Deine Oracle-Verbindungsresource, die Du über [OCILogon](http://de3.php.net/OCILogon) erhälst)  
  
Allerdings: Bei der letzten Zeile Deines Codes `DBMS_OUTPUT.Put_Line`{:.language-sql} habe ich irgendwie meine Zweifel, dass das funktioniert, wenn Du P\_OUT haben willst, solltest Du veilleicht am Ende lieber ein `SELECT P_OUT FROM DUAL`{:.language-sql} machen, dann kannst Du in PHP (falls `$res`{:.language-php} true ist) folgendes machen:  
  
~~~php
$nrows = OCIFetchStatement($stmt, $rows);  
$p_out = $rows['P_OUT'][0];

Dann steht in $p_out der Wert für P_OUT aus Deinem SQL-Statement. (Hinweis: Die OCI-Funktionen wurden unter PHP5 umbenannt, ich habe hier die PHP4-Funktionen verwendet, die auch weiterhin in PHP5 funktionieren, die jedoch bei reinen PHP5-Systemen nicht mehr verwendet werden sollten - OCIFetchStatement ist seltsamerweise gar nicht mehr dokumentiert, oci_fetch_all wäre hier die PHP5-Entsprechung, bei der jedoch meiner Erinnerung nach nur die ersten beiden Parameter mit denen von OCIFetchStatement übereinstimmen.)

Viele Grüße,
Christian