Estoy realizando una aplicación con .NET y ORACLE.
La situación es la siguiente: trato de insertar en la BD un campo de tipo blob, pero no encuentro como, ya he hecho varios intentos y nada.
He encontrado varios ejemplos pero todos usan procedimientos un poco diferentes a lo que intento:
dim cmd as oraclecommand(sSQL, conexion)
cmd.parameters.add("TipoBlob", oracletype.blob).value= arreglodebytes
cmd.Executenonquery()
He intentado con todos los tipos ORACLETYPE y con todos me marca error.
La cosa es que con SQL se le asigna un arreglo de bytes al parametro, pero en Oracle, por los ejemplos que he visto debe ser un tipo ORACLELOB.
Por algunas razones me es un poco difícil agregar validaciones de que cuando sea un campo de tipo BLOB me haga el procedimiento que he visto.
No se si me pudieran ayudar para ver si puedo hacer lo que quiero o debe de hacer los procedimientos que he encontrado
Código:
Un ejemplo:
DECLARE l_bfile BFILE;
l_blob BLOB;BEGIN INSERT INTO ARCHIVOS (CO_ARCHIVO, NOMBRE_ARCHIVO, BIN, FX_ALTA) VALUES ('000001','imagen.gif',EMPTY_BLOB(),SYSDATE) RETURN BIN INTO l_blob;
l_bfile := BFILENAME('IMAGES', 'imagen.gif');
DBMS_LOB.fileopen(l_bfile, Dbms_Lob.File_Readonly);
DBMS_LOB.loadfromfile(l_blob,l_bfile,DBMS_LOB.getlength(l_bfile)); DBMS_LOB.fileclose(l_bfile);
COMMIT;
EXCEPTION WHEN OTHERS THEN ROLLBACK;
RAISE;END;
Otro:
cmd.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0);
:tempblob := xx; end;"
cmd.Parameters.Add(New OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output
cmd.ExecuteNonQuery()
Dim tempLob As OracleLob
tempLob = cmd.Parameters(0).Value
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite)
tempLob.Write(tempBuff, 0, tempBuff.Length)
tempLob.EndBatch()
cmd.Parameters.Clear()
cmd.CommandText = "InsertBlob.TestBlobInsert"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New OracleParameter("BlobParam", OracleType.Blob)).Value = tempLob
Gracias de Antemano