You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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包实现,步骤如下:

  1. 先让DBA创建一个数据库目录对象(映射到本地图片存放路径),并给你授权:
-- 创建目录对象(替换为你的本地图片路径)
CREATE DIRECTORY IMAGE_UPLOAD_DIR AS 'D:\local_images';
-- 给当前用户授权读取权限
GRANT READ ON DIRECTORY IMAGE_UPLOAD_DIR TO your_username;
  1. 执行以下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:15:04