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

执行rdsadmin.rds_file_util.read_text_file时遇ORA-00910错误的原因是什么?

解决Oracle 19c调用rdsadmin.rds_file_util.read_text_file时的ORA-00910错误

问题场景

在Oracle Database 19c环境中,调用rdsadmin.rds_file_util.read_text_file读取文件时触发错误:

ORA-00910: specified length too long for its datatype

当前环境参数max_string_size取值为"STANDARD",涉及的数据类型为VARCHAR2。

错误原因

当max_string_size设置为STANDARD时,Oracle中VARCHAR2类型的最大长度限制为4000字节。而rdsadmin.rds_file_util.read_text_file函数在该模式下返回的文本字段为VARCHAR2类型,若待读取的文件内容总长度超过4000字节,就会触发这个长度超限的错误。

解决办法

方法1:修改max_string_size为EXTENDED

该模式下VARCHAR2最大长度可扩展至32767字节,足以容纳更大的文件内容。操作步骤如下:

  1. 关闭所有非系统会话
  2. 执行参数修改命令:
    ALTER SYSTEM SET max_string_size=EXTENDED;
    
  3. 运行Oracle提供的扩展脚本:
    @?/rdbms/admin/utl32k.sql
    
  4. 重启数据库使参数生效

方法2:分块读取大文件(不修改参数)

若无法调整max_string_size参数,可通过UTL_FILE包自行实现分块读取逻辑,每次读取不超过4000字节的内容,避免长度超限。示例代码:

DECLARE
  v_file UTL_FILE.FILE_TYPE;
  v_buffer VARCHAR2(4000);
BEGIN
  v_file := UTL_FILE.FOPEN('YOUR_DIRECTORY', 'TARGET_FILE.TXT', 'R');
  LOOP
    UTL_FILE.GET_LINE(v_file, v_buffer, 4000);
    -- 按需处理读取到的内容,例如输出或写入表
    DBMS_OUTPUT.PUT_LINE(v_buffer);
  END LOOP;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    UTL_FILE.FCLOSE(v_file);
  WHEN OTHERS THEN
    UTL_FILE.FCLOSE(v_file);
    RAISE;
END;
/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:35:59