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

Oracle APEX自定义PL/SQL页面流程上传图片及ORA-22285报错解决

ORA-22285错误解决:Apex手动PL/SQL插入上传图片场景

错误原因

ORA-22285 是因为PL/SQL代码尝试访问的目录或文件不存在,结合Apex文件上传场景,通常是没正确处理Apex上传文件的临时存储逻辑,误用了本地文件路径或无权限的目录对象。

解决步骤

1. 改用Apex官方API读取上传文件

Apex上传的文件默认存储在APEX_APPLICATION_FILES临时表中,不要直接用UTL_FILE.FOPEN访问系统目录,而是通过查询该表获取文件内容。示例代码(假设文件项为P1_UPLOAD_FILE,目标表为IMAGE_TABLE):

DECLARE
    l_image_blob BLOB;
BEGIN
    -- 从Apex临时表获取上传文件的BLOB内容
    SELECT blob_content INTO l_image_blob
    FROM apex_application_files
    WHERE name = :P1_UPLOAD_FILE
      AND application_id = :APP_ID
      AND session_id = :APP_SESSION;

    -- 插入到目标数据表
    INSERT INTO image_table (id, image_data)
    VALUES (seq_image_id.NEXTVAL, l_image_blob);

    -- 可选:清理临时文件
    DELETE FROM apex_application_files
    WHERE name = :P1_UPLOAD_FILE
      AND application_id = :APP_ID
      AND session_id = :APP_SESSION;
END;
/

2. 检查文件项配置

确保表单中的文件上传项设置正确:

  • 存储类型选择“表”(默认配置)
  • 临时存储表指定为APEX_APPLICATION_FILES
  • 确认文件项的会话状态已正确提交

3. 若需使用UTL_FILE(不推荐)

如果必须通过UTL_FILE操作文件,需确保:

  • 数据库中存在合法的目录对象(如CREATE DIRECTORY UPLOAD_DIR AS '/path/to/dir')
  • 授予当前用户(Test)该目录的读写权限:
GRANT READ, WRITE ON DIRECTORY UPLOAD_DIR TO Test;
  • PL/SQL代码中使用目录对象名称而非绝对路径:
UTL_FILE.FOPEN('UPLOAD_DIR', 'filename.jpg', 'rb');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:28:13