رسول_57
یک شنبه 21 اردیبهشت 1393, 22:43 عصر
سوال : می خواهیم در کنار ذخیره سازی اطلاعات ، تصاویر مرتبط با آن را نیز ذخیره کنیم . چگونه می توان این کار را انجام داد . آیا اصلا امکانپذیر است ؟ در ضمن می خواهم تصاویر را به صورت Clob ذخیره کنم . از چه کدی برای این کار استفاده کنم ؟
پاسخ : اولین مرحله ایجاد یک دایرکتوری در اوراکل و مپ کردن آن به فولدری است که تصاویر در آن قرار دارد ، با استفاده از کد زیر :
create directory image_dir as 'c:\image_dir';
سپس باید از پروسیژری برای وارد کردن تصاویر در جدول استفاده کنید . ابتدا جدولی که می خواهید تصاویر را در آن ذخیره کنید طراحی کنید . دقت کنید که از نوع داده Blob برای ذخیره اطلاعات استفاده می کنیم . از کد زیر برای این کار استفاده کنید :
CREATE TABLE test_image (
ID NUMBER,
image_filename VARCHAR2(50),
image BLOB );
حالا از پروسیژر زیر برای وارد کردن تصاویر در جدول فوق استفاده کنید :
CREATE OR REPLACE PROCEDURE insert_image_file (p_id NUMBER, p_image_name IN VARCHAR2)IS
src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
BEGIN
src_file := BFILENAME ('image_DIR', p_image_name);
-- insert a NULL record to lock
INSERT INTO temp_image
(ID, image_name, image
)
VALUES (p_id, p_image_name, EMPTY_BLOB ()
)
RETURNING image
INTO dst_file;
-- lock record
SELECT image
INTO dst_file
FROM temp_image
WHERE ID = p_id AND image_name = p_image_name
FOR UPDATE;
-- open the file
DBMS_LOB.fileopen (src_file, DBMS_LOB.file_readonly);
-- determine length
lgh_file := DBMS_LOB.getlength (src_file);
-- read the file
DBMS_LOB.loadfromfile (dst_file, src_file, lgh_file);
-- update the blob field
UPDATE temp_image
SET image = dst_file
WHERE ID = p_id AND image_name = p_image_name;
-- close file
DBMS_LOB.fileclose (src_file); END insert_image_file;
حالا پروسیژر را برای وارد کردن تصاویر به صورت زیر اجرا کنید :
EXECUTE insert_image_file(1,'test_image.jpg');
پاسخ : اولین مرحله ایجاد یک دایرکتوری در اوراکل و مپ کردن آن به فولدری است که تصاویر در آن قرار دارد ، با استفاده از کد زیر :
create directory image_dir as 'c:\image_dir';
سپس باید از پروسیژری برای وارد کردن تصاویر در جدول استفاده کنید . ابتدا جدولی که می خواهید تصاویر را در آن ذخیره کنید طراحی کنید . دقت کنید که از نوع داده Blob برای ذخیره اطلاعات استفاده می کنیم . از کد زیر برای این کار استفاده کنید :
CREATE TABLE test_image (
ID NUMBER,
image_filename VARCHAR2(50),
image BLOB );
حالا از پروسیژر زیر برای وارد کردن تصاویر در جدول فوق استفاده کنید :
CREATE OR REPLACE PROCEDURE insert_image_file (p_id NUMBER, p_image_name IN VARCHAR2)IS
src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
BEGIN
src_file := BFILENAME ('image_DIR', p_image_name);
-- insert a NULL record to lock
INSERT INTO temp_image
(ID, image_name, image
)
VALUES (p_id, p_image_name, EMPTY_BLOB ()
)
RETURNING image
INTO dst_file;
-- lock record
SELECT image
INTO dst_file
FROM temp_image
WHERE ID = p_id AND image_name = p_image_name
FOR UPDATE;
-- open the file
DBMS_LOB.fileopen (src_file, DBMS_LOB.file_readonly);
-- determine length
lgh_file := DBMS_LOB.getlength (src_file);
-- read the file
DBMS_LOB.loadfromfile (dst_file, src_file, lgh_file);
-- update the blob field
UPDATE temp_image
SET image = dst_file
WHERE ID = p_id AND image_name = p_image_name;
-- close file
DBMS_LOB.fileclose (src_file); END insert_image_file;
حالا پروسیژر را برای وارد کردن تصاویر به صورت زیر اجرا کنید :
EXECUTE insert_image_file(1,'test_image.jpg');