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

Come aggiornare una colonna BLOB, errore ORA-00932, mentre Inserisci funziona

Pensavo davvero che stavi immaginando le cose quando ho letto il tuo post. Per curiosità, l'ho provato e sono rimasto stupito dal fatto che questo errore si verifichi davvero.

Ci sono buone notizie. Ho dato un'occhiata e ho trovato questo:

Come posso aggiornare i dati nei campi CLOB utilizzando una>> query preparata <

Si scopre che quando si utilizza un'istruzione di aggiornamento con un LOB, il LOB deve essere dichiarato prima nei parametri. Con questo in mente, ho ricevuto lo stesso errore che hai fatto con il tuo codice, ma ha funzionato perfettamente:

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

Semplicemente cambiando i parametri.

Ho dato un complimento alla domanda e alla risposta di quella domanda originale (lo stesso ragazzo, in questo caso).

Hai ragione, sul Web c'è poco di prezioso in termini di aiuto per gli aggiornamenti sui BLOB in Oracle.

Ottima domanda. Mi sembra di aver imparato qualcosa oggi.

-- MODIFICA --

Secondo il suggerimento di OP, esiste un'altra correzione, per lo stesso thread di cui sopra, che può impedire la necessità di riorganizzare i parametri. La mia ipotesi è che questo potrebbe tornare utile anche se stai aggiornando più LOB.

Cambiare il BindByName Sembra che anche la proprietà risolva il problema:

cmd.BindByName = true;