在这种情况下,错误表明您已达到缓冲区限制 -dbms_output.put_line
不会处理如此大量的数据。
在更仔细地查看问题之后,这不是dbms_output.put_line
问题,还不是问题,正如 Alex Poole 在对您的问题的评论中指出的那样,这是光标问题。所以我建议你使用简单的 Select 语句(答案中的选项#2)。如果您寻求解决方法
create table <<name>> as
select view_name
, to_lob(text)
from user_views
例如,您将能够使用光标,但随后dbms_output.put_line
会阻止您
要生成假脱机文件,您至少有两个选项:
- 使用UTL_FILE包将数据写入文件。
让 SQL*PLUS 完成这项工作。例如:
set feedback off;
set termout off;
set colsep "|";
set long 20000; -- increase the size if it's not enough
set heading off;
set linesize 150; -- increase the size if it's not enough
spool <<file path\file name>>
select view_name
, text
from user_views
spool off;
最后,您的<<file path\file name>>
文件中将有类似的输出:
ALL_APPLY_CONFLICT_COLUMNS |select c.object_owner,
| c.object_name,
| c.method_name,
| c.resolution_column, c.column_name,
| c.apply_database_link
| from all_tab_columns o,
| dba_apply_conflict_columns c
| where c.object_owner = o.owner
| and c.object_name = o.table_name
| and c.column_name = o.column_name