如何使用SQL Developer向Oracle的Image_uploads表BLOB_CONTENT列传图?
通过SQL Developer向Image_uploads表的BLOB_CONTENT列上传图片的方法
你的表结构
NAME - VARCHAR2(256 BYTE), MIME_TYPE - VARCHAR2(128 BYTE), DOC_SIZE - NUMBER, DAD_CHARSET - VARCHAR2(128 BYTE), LAST_UPDATED - DATE, CONTENT_TYPE - VARCHAR2(128 BYTE), CONTENT - LONG RAW, BLOB_CONTENT - BLOB
操作步骤
方法一:可视化界面直接上传(适合单张图片)
- 打开SQL Developer并连接目标数据库
- 在左侧导航栏找到
Image_uploads表,右键选择编辑数据(Edit Data) - 点击工具栏的添加行按钮,新增一条空记录
- 手动填写非BLOB列的必填信息:
NAME:填图片文件名(如cat.png)MIME_TYPE:填图片对应的MIME类型(如image/png、image/jpeg)DOC_SIZE:填图片的字节大小(可右键本地图片查看属性获取)LAST_UPDATED:直接填当前日期,或输入SYSDATE让数据库自动生成DAD_CHARSET、CONTENT_TYPE根据实际业务需求填写
- 双击
BLOB_CONTENT列的单元格,弹出BLOB编辑器窗口 - 点击编辑器里的加载按钮,选择本地要上传的图片文件,确认后关闭编辑器
- 点击工具栏的提交按钮,完成数据插入
方法二:SQL脚本批量上传(适合多张图片或自动化操作)
如果需要批量上传,可借助Oracle的UTL_FILE和DBMS_LOB包实现,步骤如下:
- 先让DBA创建一个数据库目录对象(映射到本地图片存放路径),并给你授权:
-- 创建目录对象(替换为你的本地图片路径) CREATE DIRECTORY IMAGE_UPLOAD_DIR AS 'D:\local_images'; -- 给当前用户授权读取权限 GRANT READ ON DIRECTORY IMAGE_UPLOAD_DIR TO your_username;
- 执行以下SQL脚本(替换占位内容):
DECLARE l_blob BLOB; l_file UTL_FILE.FILE_TYPE; l_buffer RAW(32767); l_amount BINARY_INTEGER := 32767; l_pos INTEGER := 1; l_file_size NUMBER; BEGIN -- 临时初始化BLOB对象 DBMS_LOB.CREATETEMPORARY(l_blob, TRUE); -- 打开本地图片文件(替换文件名) l_file := UTL_FILE.FOPEN('IMAGE_UPLOAD_DIR', 'dog.jpg', 'rb', 32767); -- 获取文件字节大小 l_file_size := UTL_FILE.GET_LENGTH(l_file); -- 循环读取文件内容到BLOB WHILE l_pos <= l_file_size LOOP UTL_FILE.GET_RAW(l_file, l_buffer, l_amount); DBMS_LOB.WRITEAPPEND(l_blob, UTL_FILE.GET_LENGTH(l_buffer), l_buffer); l_pos := l_pos + l_amount; END LOOP; UTL_FILE.FCLOSE(l_file); -- 插入数据到表中(按需调整列值) INSERT INTO Image_uploads ( NAME, MIME_TYPE, DOC_SIZE, LAST_UPDATED, CONTENT_TYPE, BLOB_CONTENT ) VALUES ( 'dog.jpg', 'image/jpeg', l_file_size, SYSDATE, 'image/jpeg', l_blob ); COMMIT; DBMS_LOB.FREETEMPORARY(l_blob); EXCEPTION WHEN OTHERS THEN IF UTL_FILE.IS_OPEN(l_file) THEN UTL_FILE.FCLOSE(l_file); END IF; DBMS_LOB.FREETEMPORARY(l_blob); RAISE; END; /
验证上传结果
执行以下SQL确认图片是否上传成功:
SELECT NAME, MIME_TYPE, DBMS_LOB.GETLENGTH(BLOB_CONTENT) AS blob_file_size FROM Image_uploads WHERE NAME = 'dog.jpg';
返回的blob_file_size和本地图片字节数一致,即为上传成功。
内容的提问来源于stack exchange,提问作者Dami
相关产品推荐
相关产品推荐

