在pl / sql脚本中处理非常大的字符串

问题描述 投票:1回答:1

我正在尝试在下面的代码中运行,该代码读取表A的索引定义,以便在我删除/创建此脚本中的索引后可以再次创建它。当返回的值(ddl)小时,此脚本运行良好,但在其他值较大且一行中包含140K字符的其他环境中,此脚本失败,并出现以下错误。请注意,由于某些限制,在这种情况下我无法使用假脱机。有人可以帮助您解决此问题,还是建议其他方法?

提前感谢。

“算术,数字,字符串,转换或约束错误发生了。例如,如果尝试执行以下操作,则会发生此错误将值NULL分配给声明为NOT NULL的变量,或者尝试将大于99的整数分配给变量声明为NUMBER(2)。“

SET SERVEROUTPUT ON;
DECLARE 
my_cursor SYS_REFCURSOR;
TYPE clob_array IS VARRAY(15) OF CLOB;
index_array clob_array := clob_array();
v_clob CLOB;
--index_array SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST();
BEGIN
OPEN my_cursor FOR 'select replace(dbms_metadata.get_ddl (''INDEX'', index_name), ''"C",'', '''')
              from user_indexes
             where table_name = ''A''';

LOOP FETCH my_cursor INTO v_clob;
EXIT WHEN my_cursor%NOTFOUND;
index_array.extend;
index_array(index_array.count) := v_clob;
dbms_output.put_line(index_array(index_array.count));
END LOOP;
CLOSE my_cursor;
END;
/
sql oracle plsql plsqldeveloper clob
1个回答
0
投票

我模拟了这个问题,由于显示输出的dbms_output.put_line,导致出现此错误。尝试在服务器端切换到UTL_FILE或尝试使用任何alternatives

© www.soinside.com 2019 - 2024. All rights reserved.