reto: Code für PHP ändern

Ich habe folgenden Code und sollte diesen für PHP anwenden. Aber leider finde ich nichts hilfreiches. Kann mir jemand helfen, wie ich diesen Code im PHP benutzen kann?

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;

Danke für eure Hilfe..

  1. Hi,

    Ich habe folgenden Code

    woher hast Du denn den Code?

    Um welches DBMS handelt es sich?

    LG
    Chris

    1. Es geht um eine StoredProcedure in Oracle.

  2. Hallo!

    Ich habe folgenden Code und sollte diesen für PHP anwenden. Aber leider finde ich nichts hilfreiches. Kann mir jemand helfen, wie ich diesen Code im PHP benutzen kann?

    Das ist offenbar Oracle PQL/SQL Code.
    Ich weiß nicht was diese Zeile hier macht:

    DB_KDB.V5 ( P_C, P_ID, P_OUT );

    Kann es sein, dass V5 eine Stored Procedure ist?

    mfg
      frafu

    1. DB_KDB.V5 ( P_C, P_ID, P_OUT );

      Kann es sein, dass V5 eine Stored Procedure ist?

      Ja genau, die V5 ist die StoredProcedure. Und ich arbeite mit Oracle

  3. 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