加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – 防止sqlplus截断列名,而不进行单独的列格式化

发布时间:2020-12-12 16:24:11 所属栏目:百科 来源:网络整理
导读:默认情况下,sqlplus会将列名截断为基础数据类型的长度.我们数据库中的许多列名都以表名为前缀,因此在截断时看起来相同. 我需要在锁定的生产环境中为远程DBA指定select *查询,并拖回假脱机结果以进行诊断.列太多,无法指定单个列格式. sqlplus是否提供统一阻止
默认情况下,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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读