sql >> Database >  >> RDS >> Oracle

Een BLOB-kolom bijwerken, fout ORA-00932, terwijl Invoegen werkt

Ik dacht echt dat je je dingen inbeeldde toen ik je bericht las. Uit nieuwsgierigheid probeerde ik het en was verbaasd dat deze fout echt voorkomt.

Er is goed nieuws. Ik snuffelde rond en vond dit:

Hoe kan ik gegevens in CLOB-velden bijwerken met een>> voorbereide query <

Het blijkt dat bij gebruik van een update-statement met een LOB, de LOB eerst in de parameters moet worden gedeclareerd. Met dat in gedachten kreeg ik dezelfde fout als jij met je code, maar dit werkte perfect:

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;
}

Gewoon door de parameters te veranderen.

Ik heb een pluim gegeven voor de vraag en het antwoord van die oorspronkelijke vraag (dezelfde man, in dit geval).

Je hebt gelijk, er is bitter weinig op het web om hulp te bieden voor updates over BLOB's in Oracle.

Grote vraag. Ik heb het gevoel dat ik vandaag iets heb geleerd.

-- BEWERK --

Volgens de suggestie van OP is er een andere oplossing, volgens dezelfde thread waarnaar hierboven wordt verwezen, die de noodzaak van het herschikken van de parameters kan voorkomen. Ik denk dat dit ook van pas kan komen als je meerdere LOB's bijwerkt.

De BindByName wijzigen Property lijkt het probleem ook op te lossen:

cmd.BindByName = true;



  1. Indexen gebruiken om de prestaties van MySQL-query's te verbeteren

  2. PDO sqlsrv:kon stuurprogramma niet vinden

  3. Een rij in dezelfde tabel kopiëren zonder de 50+ kolomnamen te hoeven typen (terwijl u 2 kolommen wijzigt)

  4. SQLite JSON_EACH()