Announcement

Collapse
No announcement yet.

Oracle 12c Prozedur Parameter Übergabe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Oracle 12c Prozedur Parameter Übergabe

    Hallo Forumsleute,

    ich habe keine Oracle Erfahrung (nur MySql) und auch keine DB zur Verfügung - das macht das Testen kompliziert...

    Aufgabenstellung:
    Ich muss an eine Prozedur aus PHP heraus drei Paramter übergeben.
    KASSE_UPDATE(varchar, varchar, number);

    Über die Konsole beim Kunden geht das so:
    execute KASSE_UPDATE('LURA','05022014',123.91);


    Dieser Aufruf funktioniert nicht, Fehlercodes liegen mir leider nicht vor:

    [highlight=sql]
    $conn = oci_connect("user", "pass", "db");
    if (!$conn) {
    return false;
    }

    $sql = 'BEGIN KASSE_UPDATE(:Konto, atum, :Neuer_Wert); END;';
    $stmt = oci_parse($conn, $sql);

    oci_bind_by_name($stmt, ":Konto", 'LURA', 32);
    oci_bind_by_name($stmt, "atum", '05022014', 32);
    oci_bind_by_name($stmt, ":Neuer_Wert", 123.91, 32);

    oci_execute($stmt);
    oci_free_statement($stmt);
    oci_close($conn);
    [/highlight]



    Ich habe dann noch das hier getestet, da gab es dann Fehlercodes:

    [highlight=sql]
    $conn = oci_connect("user", "pass", "db");
    if (!$conn) {
    return false;
    }

    $sql = "KASSE_UPDATE('LURA','05022014',123.91);";
    $stmt = oci_parse($conn, $sql);

    $execute_return = oci_execute($stmt); // Execute Statement

    if (!$execute_return) {
    echo "<h2>EXEC NOT</h2>";

    $e = oci_error($stmt);
    var_dump ( $e );

    }
    [/highlight]


    ******
    Fehlermeldungen

    EXEC NOT

    --------------------------------------------------------------------------------
    [highlight=php]
    array(4) {
    ["code"]=> int(900)
    ["message"]=> string(34) "ORA-00900: Ungültige SQL-Anweisung"
    ["offset"]=> int(0)
    ["sqltext"]=> string(39) "KASSE_UPDATE('LURA','05022014',123.91);"
    }
    [/highlight]
    --------------------------------------------------------------------------------

    ******

    EXEC NOT

    --------------------------------------------------------------------------------
    [highlight=php]
    array(4) {
    ["code"]=> int(933)
    ["message"]=> string(49) "ORA-00933: SQL-Befehl wurde nicht korrekt beendet"
    ["offset"]=> int(56)
    ["sqltext"]=> string(44) "call KASSE_UPDATE('LURA','05022014',123.91);"
    }
    [/highlight]
    --------------------------------------------------------------------------------

    ******

    Ich komme damit überhaupt nicht weiter, hat jemand von Euch Hinweise / Ideen?

    Schöne Grüße aus Köln
    Günther

  • #2
    Dein geänderter Aufruf enthält im SQL Statement kein Begin .. End; (nennt man anonymen Block). Der ist als Klammerung notwendig, wenn man Oracle Prozeduren so aufruft, egal ob PHP oder anders.
    Bau das also wieder in Deinen Test ein.

    Ich hab jetzt weder Oracle 12 noch Php hier, aber die Parameter sollen in einfachen Hochkomma angegeben werden, also ' nicht ", aber vielleicht ist php das egal, bin da kein Spezi.
    Möglich wäre es, dass der Datumstyp nicht erkannt / konvertiert wird, sofern die Proc ein echtes Date erwartet.

    Also erstmal Begin End; wieder rein, dann die Fehlermeldung verstehen oder posten. Dabei darauf achten, dass ein Semicolon hinter dem Prozeduraufruf steht, so wie jetzt auch in beiden Beispielen.
    Gruß, defo

    Comment


    • #3
      Originally posted by juenta View Post
      ... und auch keine DB zur Verfügung - das macht das Testen kompliziert...
      Dann änderer das:

      http://www.oracle.com/technetwork/da...ads/index.html

      Comment


      • #4
        Vielen Dank für die Antworten, das Problem ist gelöst:

        BEGIN und END hatten gefehlt und dann gab es noch Berechtigungsprobleme...

        Schöne Grüße aus Köln
        Günther

        Comment

        Working...
        X