Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So aktualisieren Sie eine BLOB-Spalte, Fehler ORA-00932, während Insert funktioniert

Ich dachte wirklich, du bildest dir Dinge ein, als ich deinen Beitrag las. Aus Neugier habe ich es ausprobiert und war erstaunt, dass dieser Fehler wirklich auftritt.

Es gibt gute Neuigkeiten. Ich habe herumgestöbert und folgendes gefunden:

Wie kann ich Daten in CLOB-Feldern mit einer>> vorbereiteten Abfrage <

Es stellt sich heraus, dass bei Verwendung einer Update-Anweisung mit einem LOB das LOB zuerst in den Parametern deklariert werden muss. In diesem Sinne habe ich den gleichen Fehler wie bei Ihrem Code erhalten, aber das hat perfekt funktioniert:

public static bool StoreBlobImage(OracleConnection conn, string ArtNr, byte[] bImageJpg)
{
    bool Ok = false;
    string Sql = "update MyTable set Image = :Image where ArtNr = :ArtNr";

    using (OracleCommand cmd = new OracleCommand(Sql, conn))
    {
        cmd.Parameters.Add("Image", OracleDbType.Blob).Value = bImageJpg;
        cmd.Parameters.Add("ArtNr", OracleDbType.Varchar2, 8).Value = ArtNr;

        try
        {
            cmd.ExecuteNonQuery();
        }
        catch (Exception TheException)
        {
        }
    }
    return Ok;
}

Einfach durch Umschalten der Parameter.

Ich habe der Frage und der Antwort dieser ursprünglichen Frage ein Kudo gegeben (in diesem Fall derselbe Typ).

Sie haben recht, es gibt im Internet herzlich wenig Hilfe für Updates zu BLOBs in Oracle.

Tolle Frage. Ich habe das Gefühl, heute etwas gelernt zu haben.

-- BEARBEITEN --

Gemäß dem Vorschlag von OP gibt es eine weitere Korrektur gemäß demselben Thread, auf den oben verwiesen wird, die die Notwendigkeit einer Neuanordnung der Parameter verhindern kann. Ich vermute, dass dies auch nützlich sein könnte, wenn Sie mehrere LOBs aktualisieren.

Umschalten des BindByName Property scheint das Problem ebenfalls zu lösen:

cmd.BindByName = true;