sql >> Database teknologi >  >> RDS >> Oracle

Sådan opdateres en BLOB-kolonne, fejl ORA-00932, mens Insert virker

Jeg troede virkelig, du forestillede dig ting, da jeg læste dit indlæg. Af nysgerrighed prøvede jeg det og var overrasket over, at denne fejl virkelig opstår.

Der er gode nyheder. Jeg søgte rundt og fandt dette:

Hvordan kan jeg opdatere data i CLOB-felter ved hjælp af en>> forberedt forespørgsel <

Det viser sig, når du bruger en opdateringssætning med en LOB, at LOB skal deklareres først i parametrene. Med det i tankerne fik jeg den samme fejl, som du fik med din kode, men dette fungerede 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;
}

Simpelthen ved at skifte parametrene.

Jeg gav en ros til spørgsmålet og svaret på det oprindelige spørgsmål (samme fyr, i dette tilfælde).

Du har ret, der er meget lidt på nettet i vejen for hjælp til opdateringer om BLOB'er i Oracle.

Godt spørgsmål. Jeg føler, at jeg har lært noget i dag.

-- REDIGER --

I henhold til OP's forslag er der en anden rettelse, ifølge den samme tråd, der refereres til ovenfor, der kan forhindre nødvendigheden af ​​at omarrangere parametrene. Mit gæt er, at dette også kan være nyttigt, hvis du opdaterer flere LOB'er.

Skift BindByName Ejendom ser også ud til at løse problemet:

cmd.BindByName = true;



  1. Sådan forbinder du MySQL til Java-program

  2. mysql concat funktion

  3. Oracle udløser denne kontrolbegrænsning på månedsbasis

  4. SQL-injektionsforebyggelse med dynamisk SQL ALTER USER-forespørgsel