Re: updating table with two images
From: Daniel Morgan <damorgan_at_x.washington.edu>
Date: Wed, 22 Oct 2003 07:02:43 -0700
Message-ID: <1066831377.574611_at_yasure>
Vladimir Kanovnik wrote:
Go to google and find those postings. One thing I think is missing from what you wrote is:
dbms_lob.getlength(src_file);
Date: Wed, 22 Oct 2003 07:02:43 -0700
Message-ID: <1066831377.574611_at_yasure>
I have table with columns id(number), photo(blob) and thumbnail(blob). I
would like to insert image (using stored procedure) from file to column
photo and in same time copy reduced image to column thumbnail. My code is:
CREATE OR REPLACE PROCEDURE "MDEMO"."PUT_PHOTO_THUMB"
(
image_file_directory in varchar2,
image_file_name in varchar2,
image_file_mime_type in varchar2,
image_http_path in varchar2,
image_http_name in varchar2,
ord_procedure_path in varchar2,
ord_content_type in varchar2,
ord_content_blob out blob
)
as
localImage ordsys.ordimage;
localThumb ordsys.ordimage;
begin
/*
* Create an empty object.
*/
localImage := ordsys.ordimage( ordsys.ordsource( empty_blob(),
null,
null,
null,
null,
null ),
null,
null,
null,
null,
null,
null,
null );
localThumb := ordsys.ordimage( ordsys.ordsource( empty_blob(),
null,
null,
null,
null,
null ),
null,
null,
null,
null,
null,
null,
null );
/*
* Process the request based on the location of the new image.
*/
if length( image_file_directory ) > 0 then
/*
* Image is stored as a FILE in a database server directory.
* Set the local image object to reference the specified file.
*/
localImage.clearLocal();
localImage.setSource( 'FILE',
image_file_directory,
image_file_name );
localImage.setMimeType( image_file_mime_type );
elsif length ( image_http_path ) > 0 then
/*
* Image is stored on a web server somewhere.
* Set the local image object to reference the URL.
*/
localImage.clearLocal();
localImage.setSource( 'HTTP',
image_http_path,
image_http_name );
else
/*
* Image is being uploaded from the client to be stored in the
database.
* Set the flag to indicate the image is to be stored in the object's
* local-data BLOB.
*/
localImage.setLocal();
localImage.setMimeType( ord_content_type );
localThumb.setMimeType( ord_content_type );
/* copy reduced image from localImage to localThumb*/
localImage.processCopy('maxScale=50,50',localThumb);
end if;
/*
* Update the image object in the table. If the image is to be stored in
* the object's local-data BLOB, then return the LOB handle so the web
* agent can store the image in the database.
*/
if localImage.isLocal() then
update MPHOTOS i set i.IMAGE = localImage where ID =
ord_procedure_path
return i.IMAGE.source.localdata into ord_content_blob;
update MPHOTOS i set i.THUMB = localThumb where ID =
ord_procedure_path
return i.THUMB.source.localdata into ord_content_blob;
else
update MPHOTOS i set i.IMAGE = localImage where ID =
ord_procedure_path;
update MPHOTOS i set i.THUMB = localThumb where ID =
ord_procedure_path;
end if;
end;
/
SHOW ERRORS;
When I want to execute (using intermedia clipboard) I receive a message
"invalid LOB locator specified". What is wrong?
Thanx in advance
I have several times in the last year posted complete code for doing
this to these usenet groups.Go to google and find those postings. One thing I think is missing from what you wrote is:
dbms_lob.getlength(src_file);
-- Daniel Morgan http://www.outreach.washington.edu/ext/certificates/oad/oad_crs.asp http://www.outreach.washington.edu/ext/certificates/aoa/aoa_crs.asp damorgan_at_x.washington.edu (replace 'x' with a 'u' to reply)Received on Wed Oct 22 2003 - 16:02:43 CEST
