jr_ewing
03-11-2006, 16:12:37
Hola a todos,
Estoy intentando grabar imágenes en una columna BLOB de una tabla de Oracle 9i con Delpih IV. Dado que el usuario de conexión a la aplicación, por razones de seguridad, lo único que tiene son sinónimos a Stored Procedures de otro schema con grants de execute (el usuario de conexión no vé las tablas), la única forma de efectuar la grabación es pasando el valor a un Stored Procedure.
Estoy utilizando ODAC en Delphi, tengo un componente TOraQuery (similar al TQuery+TUpdateSql) con una columna IMAGEN tipo Blob. El código para SQLInsert del componente es algo así:
begin
INS_REGISTRO(:CODIGO, :IMAGEN);
end;
La parte de captura de datos en Delphi la resuelvo utilizando un componente TDBImage, y con este código:
procedure TForm1.DBImage1DblClick(Sender: TObject);
begin
if OpenPictureDialog1.Execute then OpenFile(OpenPictureDialog1.FileName)
end;
procedure TForm1.OpenFile(const Filename: string);
begin
try
DBImage1.Picture.LoadFromFile(Filename);
except
on EInvalidGraphic do
DBImage1.Picture.Graphic := nil;
end;
end;
Esto funciona bien, me lee cualquier tipo de imagen (jpg, bmp, o ico).
El problema lo tengo en Oracle. Según lo que leí en la documentación, debería resolverlo así (asumiendo que las imágenes a cargar sean chicas, nunca superiores a 32K):
PROCEDURE INS_REGISTRO
(vCodigo in varchar2,
blImagen in blob) IS
blAux blob;
rwAux raw(32767);
BEGIN
insert into TABLA
(codigo, imagen)
values
(vCodigo, empty_blob())
return
imagen into blAux;
nLong:=32767;
dbms_lob.read(blImagen,nLong,1,rwAux);
dbms_lob.writeappend(blAux,32767,blImagen);
commit;
END;
Al ejecutar el SP Oracle me devuelve el sgte error:
ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified: ORA-22275
¿Alguien sabe en qué me estoy equivocando? O lo que es peor: lo que quiero hacer...¿se puede hacer?
Gracias.
Estoy intentando grabar imágenes en una columna BLOB de una tabla de Oracle 9i con Delpih IV. Dado que el usuario de conexión a la aplicación, por razones de seguridad, lo único que tiene son sinónimos a Stored Procedures de otro schema con grants de execute (el usuario de conexión no vé las tablas), la única forma de efectuar la grabación es pasando el valor a un Stored Procedure.
Estoy utilizando ODAC en Delphi, tengo un componente TOraQuery (similar al TQuery+TUpdateSql) con una columna IMAGEN tipo Blob. El código para SQLInsert del componente es algo así:
begin
INS_REGISTRO(:CODIGO, :IMAGEN);
end;
La parte de captura de datos en Delphi la resuelvo utilizando un componente TDBImage, y con este código:
procedure TForm1.DBImage1DblClick(Sender: TObject);
begin
if OpenPictureDialog1.Execute then OpenFile(OpenPictureDialog1.FileName)
end;
procedure TForm1.OpenFile(const Filename: string);
begin
try
DBImage1.Picture.LoadFromFile(Filename);
except
on EInvalidGraphic do
DBImage1.Picture.Graphic := nil;
end;
end;
Esto funciona bien, me lee cualquier tipo de imagen (jpg, bmp, o ico).
El problema lo tengo en Oracle. Según lo que leí en la documentación, debería resolverlo así (asumiendo que las imágenes a cargar sean chicas, nunca superiores a 32K):
PROCEDURE INS_REGISTRO
(vCodigo in varchar2,
blImagen in blob) IS
blAux blob;
rwAux raw(32767);
BEGIN
insert into TABLA
(codigo, imagen)
values
(vCodigo, empty_blob())
return
imagen into blAux;
nLong:=32767;
dbms_lob.read(blImagen,nLong,1,rwAux);
dbms_lob.writeappend(blAux,32767,blImagen);
commit;
END;
Al ejecutar el SP Oracle me devuelve el sgte error:
ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified: ORA-22275
¿Alguien sabe en qué me estoy equivocando? O lo que es peor: lo que quiero hacer...¿se puede hacer?
Gracias.