【问题标题】:Strange ORA-06502: PL/SQL: numeric or value error奇怪的 ORA-06502:PL/SQL:数字或值错误
【发布时间】:2011-12-15 19:35:39
【问题描述】:

我正在遍历数据库中的表定义并提取 DDL,以便能够为软件测试目的创建表副本的“黄金数据”集。我有下面的代码,它可以将 DDL 提取到一个引发 ORA-06502 错误的表中。问题是,我已将 DDL 返回的变量定义为 CLOB,它应该足够大。代码如下:

    create or replace
procedure gettabledescription as 
  current_date_time  varchar2(32);
  sql_statement varchar2(200);
  ddl_return clob;
  new_ddl clob;
BEGIN
  DBMS_OUTPUT.ENABLE;
  current_date_time:= to_char(sysdate,'MM/DD/YYYY - HH24:MI:SS');
  dbms_output.put_line(current_date_time);
  for cursor_rec in (select * from user_objects where object_type='TABLE' and object_name not like 'TM%' and object_name not like 'TZ_%' and object_name not like 'EXT_%' and object_name not like 'RPT_%' and object_name not like 'ETL_%') loop
    sql_statement := 'select dbms_metadata.get_ddl(''TABLE'',' || '''' || cursor_rec.object_name || '''' || ') from dual';
    execute immediate sql_statement into ddl_return;
    **error thrown here** new_ddl := replace(ddl_return,TO_CHAR(cursor_rec.object_name),'QA_' || TO_CHAR(cursor_rec.object_name));
    dbms_output.put_line(new_ddl);
   end loop;
END GETTABLEDESCRIPTION;

我不明白为什么会出现这个错误。

【问题讨论】:

  • 1) 在哪一行抛出错误?

标签: sql oracle


【解决方案1】:

在 Oracle 10gR2 上,当我使用长度超过 8191 字节的 varchar2 或 clob 调用 DBMS_OUTPUT.PUT_LINE 时,我收到 ORA-06502 错误。解决方案是循环遍历 clob,取出行并为每行调用一次 put_line。

【讨论】:

  • 谢谢,这就是问题所在。我实际上只是使用 DBMS_OUTPUT.PUT_LINE 作为调试工具。我几乎不知道它本身就是导致错误的原因!
猜你喜欢
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 2021-12-26
  • 2014-12-30
  • 1970-01-01
相关资源
最近更新 更多