Announcement

Collapse
No announcement yet.

PHP und stored -Prozeduren in Oracle

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

  • PHP und stored -Prozeduren in Oracle

    Hallo zusammen,

    ich habe ein Problem mit einem stored procedure call.
    Das Ganze ist, dass wenn ich zu meinem $date -Parameter Uhrzeit dazufüge funktioniert nicht mehr. Unten noch mal was ich mache und die Fehlermeldungen.

    ------------------------------

    Wenn ich nur Datum übergebe (genau wie unten steht)

    $date = "$dd.$mm.$yyyy"; (18.08.2007 ist echo Ausgabe)

    funktioniert.
    Wenn ich aber Uhrzeit dazu addiere (wie unten)

    $date = "$dd.$mm.$yyyy $hour:$min:$ss"; (15.08.2007 13:30:00)

    funktioniert nicht mehr und ich bekomme die Meldung:

    ORA-01830:
    date format picture ends before converting entire input string

    -----------------------------------
    Wenn ich to_date() im Format

    $date = "to_date('$dd.$mm.$yyyy $hour:$min:$ss' , 'DD.MM.YYYY HH24:MI:SS')";

    benutze, mit oder ohne Uhrzeit funktioniert gar nicht, ich bekomme die Fehlermeldung:

    ORA-01858: a non-numeric character was found where a numeric was expected ORA-06512
    ----------------------------------------------
    Der Aufruf sieht folgenden Maßen aus.

    $sql = 'BEGIN pkg_name.procedure_name(:_objid, :user, :date, :notes , :errornumber, :errortext ); END;';

    $stmt = oci_parse($db_conn, $sql);
    if($stmt == false){
    echo OCIError($stmt)."<br>";
    exit;
    }


    // Bind the input parameter
    oci_bind_by_name($stmt,':_objid',$ids[$i], 32);
    oci_bind_by_name($stmt,':user',$user, 32);
    oci_bind_by_name($stmt,':date',$date, 64);
    oci_bind_by_name($stmt,':notes',$text, 2000);

    // Bind the output parameter
    oci_bind_by_name($stmt,':errornumber',$errornumber , 32);
    oci_bind_by_name($stmt,':errortext',$errortext, 2000);

    oci_execute($stmt);
    if($stmt == false){
    echo OCIError($stmt)."<br>";
    exit;

    Die stored procedure liegt nicht bei uns, aber von der Firma behaupten, daß sie erwartet an der Stelle ein Oracle-Datum, die so aussieht (dd.mm.yyyy hh24:mi:ss)

    Es wäre super wenn mir jemand Tipps gibt, woran es liegen kann.
    Ich danke im Voraus.

    Grüsse

  • #2
    Ich habe mit SQL Plus den untenstehenden Aufruf ausgeführt und es hat geklappt.

    pkg_name.procedure_name(269902873,'jemand',to_date ('18.08.2007 13:31:00','DD.MM.YYYY HH24:MI:SS'),'Test',err_num,err_text)

    das heißt, die Procedur braucht ein Datum genau in diesem Format.


    Wenn ich aber bei mir im Tool das Datum direkt eintippe ohne php-Variable:

    $sql = "BEGIN pkg_name.procedure_name(bjid, :user, '18.08.2007 13:31:00', :notes , :errornumber, :errortext ); END;";

    bekomme ich wieder das gleiche Fehlermeldung.

    ORA-01830: date format picture ends before converting entire input string


    So funktioniert einwandfrei:
    $sql = "BEGIN pkg_name.procedure_name(bjid, :user, '18.08.2007', :notes , :errornumber, :errortext ); END;";

    Kann es sein, daß das Problem gar nicht bei mir liegt???

    Danke und Viele Grüße

    Comment


    • #3
      Solution

      Für die, die sich interessieren.

      Es war ein Oracle DB 'bug' . Alle Oracle DBs sind mit amerikanische Datum- und Uhrzeit- Format "by default" konfiguriert.

      Das Statement :

      $set_oracle = "ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YYYY HH24:MI:SS'";

      hilft.
      Muss allerdings bevor alle anderen ausgeführt werden, oder einfach der DB-Server muss konfiguriert werden.

      Grüße

      Comment

      Working...
      X