oracle 可能导致ORA-00910的原因:指定的长度对于它的数据类型来说太长?

x7rlezfr  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(269)

在运行rdsadmin.rds_file_util.read_text_file时,我得到错误“ORA-00910:指定的长度对于其数据类型“太长。经过广泛的调查,我找到了原因。
Oracle Database 19c数据类型为VARCHAR 2。参数max_string_size为“STANDARD”。

djmepvbi

djmepvbi1#

这些情况可能导致ORA-00910

创建表

ORA-00910最明显的可能原因是在表创建期间。

create table t (
        v varchar2(4001)
    );

个字符

字段中大于4000个字符的管道行

也可以在执行流水线表函数时获得ORA-00910。在下面的代码中,如果l_text.text长度超过4000个字符,则将显示ORA-00910。

create or replace package test_str_pkg
    is
    
        type text_t is  record (
            text    varchar2(32767)
        );
    
        type text_list_t is table of text_t;
    
        function test_str
        return text_list_t
        pipelined;
    
    end test_str_pkg;
    /
    
    create or replace package body test_str_pkg
    is
        function test_str
        return text_list_t
        pipelined
        is
            l_text    text_t;
        begin
            l_text.text := rpad('a', 4001, 'a');
            pipe row(l_text);
        end test_str;
    
    end test_str_pkg;
    /
    
    select * from table(
        test_str_pkg.test_str
    );
Package created.
  
Package body created.

    test_str_pkg.test_str
    *
ERROR at line 2:
ORA-00910: specified length too long for its datatype

的字符串
这个简化的示例类似于RDS read_text_file中的逻辑。
解决方法是:

select text
    from table(
        rdsadmin.rds_file_util.read_text_file(
            :dir,
            :filename
        )
    )
    where length(text) <= 4000

相关错误

请将ORA-00910与其他类似措辞的错误区分开来。

PLS-00215:字符串长度约束必须在范围(1..(32767)

declare
        l_str varchar2(32768);
    begin
        null;
    end;
    /
l_str varchar2(32768);        -- PLS-00215: String length constraints must be in range (1 .. 32767)
                   *
ERROR at line 2:
ORA-06550: line 2, column 20:
PLS-00215: String length constraints must be in range (1 .. 32767)

ORA-06502:PL/SQL:数值或值错误:字符串缓冲区太小

declare
        l_str varchar2(32767);
    begin
        l_str := rpad('a', 32768, 'a');
    end;
    /
declare
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 4

相关问题