sql >> Databasteknik >  >> RDS >> Oracle

Hur man uppdaterar en BLOB-kolumn, fel ORA-00932, medan Insert fungerar

Jag trodde verkligen att du inbillade dig saker när jag läste ditt inlägg. Av nyfikenhet provade jag det och blev förvånad över att det här felet verkligen inträffar.

Det finns goda nyheter. Jag letade runt och hittade detta:

Hur kan jag uppdatera data i CLOB-fält med en>> förberedd fråga <

Det visar sig när man använder en uppdateringssats med en LOB, att LOB måste deklareras först i parametrarna. Med det i åtanke fick jag samma fel som du gjorde med din kod, men det här fungerade perfekt:

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

Helt enkelt genom att byta parametrar.

Jag gav en eloge till frågan och svaret på den ursprungliga frågan (samma kille, i det här fallet).

Du har rätt, det finns mycket lite på webben i vägen för hjälp för uppdateringar av BLOB i Oracle.

Bra fråga. Jag känner att jag har lärt mig något idag.

-- REDIGERA --

Enligt OP:s förslag finns det en annan fix, enligt samma tråd som hänvisas till ovan, som kan förhindra nödvändigheten av att ordna om parametrarna. Min gissning är att detta också kan vara användbart om du uppdaterar flera LOB:er.

Byt BindByName Egenskapen verkar också lösa problemet:

cmd.BindByName = true;



  1. Automatiserad eller regelbunden säkerhetskopiering av mysql-data

  2. sammanställningsfackliga fel

  3. Trädvyskontroll Markera Lägg till Ta bort noder

  4. Hur du justerar prestanda för SQL Server, Azure SQL Database och Amazon RDS