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

Oracle APEX 20.x如何通过PL/SQL将文件以Blob格式上传至自定义表

APEX 20.x 纯PL/SQL实现文件Blob上传入库方案

前置配置补全

你现有基础配置已经完成80%,先补3个容易遗漏的必要设置:

  • 修正隐藏项命名:你创建的文件名隐藏项需要加页面前缀,即命名为P1_FILE_NAME,和其他页面项命名规则保持一致,否则值无法正常传递
  • 配置P1_CHOOSE_FILE的映射关系:在该文件浏览项的「设置」板块,找到「文件名存储在页面项」下拉选P1_FILE_NAME,「MIME类型存储在页面项」下拉选P1_MIMETYPE
  • 所有相关页面项(P1_CHOOSE_FILE、P1_MIMETYPE、P1_FILE_NAME)的「会话状态保护」属性设置为无限制,避免提交时触发状态校验报错
  • 上传按钮绑定的动态动作配置:触发事件选「单击」,真操作选「执行PL/SQL代码」,在操作配置的「要提交的页面项」栏填入P1_CHOOSE_FILE,P1_MIMETYPE,P1_FILE_NAME,确保服务器端能拿到上传的文件数据

核心PL/SQL代码

直接将以下代码粘贴到动态动作的PL/SQL代码输入框即可:

BEGIN
  INSERT INTO upload_file (
    fileblob,
    filename,
    mimetype,
    createdate
  ) VALUES (
    :P1_CHOOSE_FILE,
    :P1_FILE_NAME,
    :P1_MIMETYPE,
    SYSDATE
  );
  COMMIT;

  -- 上传成功后清空表单、弹出提示
  apex_util.set_session_state(p_name => 'P1_CHOOSE_FILE', p_value => NULL);
  apex_util.set_session_state(p_name => 'P1_FILE_NAME', p_value => NULL);
  apex_util.set_session_state(p_name => 'P1_MIMETYPE', p_value => NULL);
  apex_message.add_success(p_message => '文件上传完成');
END;

说明:不需要额外给创建时间隐藏项传值,直接用数据库内置SYSDATE取值更准确,可避免前端传值的时区偏差问题。

操作步骤对应界面指引(APEX 20.x版本)

  1. 文件浏览项配置界面:在页面设计器左侧渲染树选中P1_CHOOSE_FILE,右侧属性面板找到「设置」分组,即可看到Blob列、文件名、MIME类型的映射配置项,按前面要求选对应页面项即可
  2. 动态动作配置界面:在渲染树选中你创建的上传按钮,右侧属性面板切到「动态动作」标签,选中你绑定的单击动作,在「真」操作下选「执行PL/SQL代码」,下方即可看到代码输入框、要提交的页面项输入栏
  3. 验证方式:配置完成后保存页面运行,选择本地文件点击上传,弹出成功提示后,用数据库客户端查询upload_file表,即可看到对应文件记录,fileblob字段长度和本地文件大小一致即为配置成功

常见问题排查

  • 插入的fileblob字段长度为0:检查动态动作配置里的「要提交的页面项」是否漏加P1_CHOOSE_FILE,未加入提交列表时服务器端无法获取文件二进制内容
  • filename/mimetype字段为空:检查P1_CHOOSE_FILE的设置板块,是否正确绑定了对应的文件名、MIME类型隐藏页面项
  • 提交时报会话状态错误:检查所有相关页面项的「会话状态保护」属性是否设置为「无限制」

内容的提问来源于stack exchange,提问作者kiric8494

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:39:44