oracle布尔类型用dbms输出,DBMS_OUTPUT输出限制的问题

这篇博客讨论了当DBMS_OUTPUT遇到1M输出限制时的问题,并提出了一种PL/SQL代码改写方案,通过SPOOL命令将输出直接写入文件,从而避免了DBMS_OUTPUT的限制。代码示例展示了如何分析和验证索引结构,并将结果保存到指定的SQL文件中。
摘要由CSDN通过智能技术生成

代码的大意是将一些输出放到bde_validate_structure&&schema&&table_name&&index_name..sql这样一个文件里。标红色的地方的输出会大于1m。serveroutput的最大值就是1M,也就是说DBMS_OUTPUT最大只能输出1M。大家帮看看有什么方法突破这个限制或改写成直接输出到一个文件而不用DBMS_OUTPUT。

SPOOL bde_validate_structure&&schema&&table_name&&index_name..sql;

DECLARE

v_sql        VARCHAR2(1000);

v_dbversion  v$instance.version%TYPE;

CURSOR c1 IS

SELECT owner,

index_name

FROM all_indexes

WHERE table_owner LIKE RTRIM(UPPER('&&schema'))||'%'

AND table_name  LIKE RTRIM(UPPER('&&table_name'))||'%'

AND index_name  LIKE '%'||RTRIM(UPPER('&&index_name'))||'%'

AND table_owner <> 'SYS'

AND owner       <> 'SYS'

AND table_owner <> 'SYSTEM'

AND owner       <> 'SYSTEM'

ORDER BY

owner,

index_name;

BEGIN

SELECT version INTO v_dbversion FROM v$instance;

v_sql:='/*$Header: bde_validate_structure'||

'&&schema&&table_name&&index_name..sql '||

'(8.0-9.2) '||TO_CHAR(sysdate,'YYYY/MM/DD')||

'   gen by bde_rebuild.sql   csierra bde $*/';

DBMS_OUTPUT.PUT_LINE(v_sql);

v_sql:='SET echo on feed on;';

DBMS_OUTPUT.PUT_LINE(v_sql);

v_sql:='SPOOL bde_validate_structure&&schema&&table_name&&index_name..txt;';

DBMS_OUTPUT.PUT_LINE(v_sql);

:v_count:=0;

FOR c1_rec IN c1 LOOP

:v_count:=:v_count+1;

v_sql:='ANALYZE INDEX '||c1_rec.owner||'.'||c1_rec.index_name||

' VALIDATE STRUCTURE;';

DBMS_OUTPUT.PUT_LINE(v_sql);

v_sql:='INSERT INTO bde_index_stats '||

'SELECT ixs.*, '''||c1_rec.owner||''', '''||c1_rec.index_name||''', '||

'sysdate, '||:v_count||

' FROM index_stats ixs;';

DBMS_OUTPUT.PUT_LINE(v_sql);

END LOOP;

v_sql:='COMMIT;';

DBMS_OUTPUT.PUT_LINE(v_sql);

v_sql:='SPOOL off;';

DBMS_OUTPUT.PUT_LINE(v_sql);

v_sql:='SET echo off feed off;';

DBMS_OUTPUT.PUT_LINE(v_sql);

END;

/

SPOOL off;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值