默认情况下,sqlplus会将列名截断为基础数据类型的长度.我们数据库中的许多列名都以表名为前缀,因此在截断时看起来相同.
我需要在锁定的生产环境中为远程DBA指定select *查询,并拖回假脱机结果以进行诊断.列太多,无法指定单个列格式. sqlplus是否提供统一阻止列名截断的任何选项?
(我使用SET MARKUP HTML ON,虽然我可以使用其他一些模态,csv等,只要它产生无缩写的输出.)
您可以尝试的一件事是动态生成“column x format a20”命令.类似于以下内容:
set termout off set feedback off spool t1.sql select 'column ' || column_name || ' format a' || data_length from all_tab_cols where table_name='YOUR_TABLE' / spool off @t1.sql set pagesize 24 set heading on spool result.txt select * from YOUR_TABLE; and rownum < 30; spool off
请注意,此示例仅适用于VARCHAR2.您需要添加解码,例如更改为DATE或NUMBER生成的“列”命令.
更新:事实证明原始SQL并没有真正改变SQL * Plus的行为.我唯一能想到的是通过以下方式将字段名称重命名为一个字符值A,B,C等.
select 'column ' || column_name || ' heading "' || chr(ascii('A') - 1 + column_id) || '"' from all_tab_cols where table_name='YOUR_TAB_NAME'
它将生成类似于的输出:
column DEPT_NO heading "A" column NAME heading "B" column SUPERVIS_ID heading "C" column ADD_DATE heading "D" column REPORT_TYPE heading "E"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。