Fetch und Cursor Fehlschlag mittendrin?



  • Hi!

    Kurze Frage zu der ich keine Antwort gefunden habe:
    Wenn ich einen Cursor öffnen und dann Sätze mit Fetch hole, kann es sein, dass zwischendrin was schiefgeht?

    Normalfall wäre ja:
    Erster Fetch OK, zweiter Fetch OK, dritter Fetch -> SQLSTATE = '02000' (Keine Sätze mehr vorhanden).

    Fehlerfall wäre für gewöhnlich:
    Erster Fetch fehlgeschlagen -> nicht mehr weitermachen

    Gibt es auch sowas wie:
    Erster Fetch Ok, zweiter Fetch Fehler, dritter Fetch OK, Fehler, Fehler, ok, usw.?

    Mir fällt nichts ein wo man nach einem fehlgeschlagen Fetch einfach mit dem nächsten Satz weiter macht/machen kann?



  • Also erstmal vorweg es heisst Datensatz und nicht Satz 🙄

    Dann... es gibt schonmal viele Gründe ausser "no more data" warum nach erfolgreichem Lesen des 1. Datensatzes was schief gehen kann:
    - Out of Memory
    - IO Error beim Lesen aus dem DB File
    - DB File inkonsistent an einer Stelle die erst für spätere Datensätze gebraucht wird
    - Irgend ein Problem mit der Netzwerkverbindung zum DB-Server
    - DB Server wurde abgeschaltet
    - DB Server ist gecrasht
    - DB Server hat sich entschlossen deine Transaktion zu killen (vielleicht weil sie zu viel Speicher braucht, weil sie in einem Deadlock beteiligt ist und als Opfer ausgewählt wurde, ...)
    - DB Admin hat deine Connection gekillt

    SQLFrage schrieb:

    Gibt es auch sowas wie:
    Erster Fetch Ok, zweiter Fetch Fehler, dritter Fetch OK, Fehler, Fehler, ok, usw.?

    Mir fällt nichts ein wo man nach einem fehlgeschlagen Fetch einfach mit dem nächsten Satz weiter macht/machen kann?

    Grundsätzlich könnte sich dieses Fehlerbild schon ergeben. Sachen wie Out of Memory oder IO Error bei Zugriff auf die DB können ja durchaus beim nächsten Versuch kein Problem mehr sein.

    Ich würde aber hoffen und fast erwarten dass der DB Server bzw. die API mit der man auf diesen zugreift sowas nicht erlaubt. Also nach dem 1. Fehler einfach gar nicht mehr versucht weiterzumachen, sondern direkt einen Fehler an die Anwendung zurückliefert.



  • Hi! Dank dir für die Antwort. Ich werde das Fehlerhandling dann auf "ganz" oder "gar nicht", also abbrechen sobald ein Fetch fehlschlagen sollte.



  • Darf ich fragen was du programmierst? Bloss aus Interesse, ist nicht wichtig, musst es auch nicht beantworten wenn du nicht magst 🙂



  • Man könnte das über eine Pokemon-Exception abfangen und dann eine Meldung ausgeben: "Bitte versuchen sie es auf der nächsten Seite" 😃 👍 💡