Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como atualizar uma coluna BLOB, erro ORA-00932, enquanto o Insert funciona


Eu realmente pensei que você estava imaginando coisas quando li seu post. Por curiosidade, eu tentei e fiquei surpreso que esse erro realmente ocorre.

Há boas notícias. Vasculhei e encontrei isto:

Como posso atualizar dados em campos CLOB usando uma>> consulta preparada <

Acontece que ao usar uma instrução de atualização com um LOB, o LOB deve ser declarado primeiro nos parâmetros. Com isso em mente, recebi o mesmo erro que você fez com seu código, mas funcionou perfeitamente:
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;
}

Simplesmente mudando os parâmetros.

Eu dei um kudo para a pergunta e resposta dessa pergunta original (mesmo cara, neste caso).

Você está certo, há muito pouco na web em termos de ajuda para atualizações em BLOBs no Oracle.

Ótima pergunta. Sinto que aprendi algo hoje.

-- EDITAR --

Por sugestão do OP, há outra correção, pelo mesmo thread mencionado acima, que pode evitar a necessidade de reorganizar os parâmetros. Meu palpite é que isso também pode ser útil se você estiver atualizando vários LOBs.

Alternando o BindByName A propriedade parece também resolver o problema:
cmd.BindByName = true;