最近使用spool导数,出现导出的数据科学计数法、小数位数丢失、字段间补了很多空格,网上搜索了一圈采取的措施:
1.解决数据格式问题
使用to_char函数,例如to_char(num,‘9999.99’)
2.解决字段间空格问题
导出的查询sql字段间使用||加分隔符的方式连接起来,如
select COLUMN_NAME||'~'||DATA_TYPE||'~'||DATA_LENGTH||'~'||DATA_PRECISION||'~'||DATA_SCALE from user_tab_columns
实际使用的过程中,发现导出number型字段的时候,字段间还是自动补了空格,这个时候,可以在to_char函数外嵌套replace函数,去空格,例如:
select COLUMN_NAME||'~'||DATA_TYPE||'~'||replace(to_char(DATA_LENGTH,'99999'),' ','')||'~'||DATA_PRECISION||'~'||DATA_SCALE from user_tab_columns
如果表字段比较少,需要处理的表也少的话,我们可以直接把导出的sql写好;表字段超多,需要处理的表也多的话,再手写就比较麻烦了,下面介绍一个我自己写的一个只要获取到表名,就能按照格式使用约定的分隔符导出的例子。
1.首先我们通过user_tab_columns表,查询表的字段名、字段类型、字段长度等信息,这边要注意,表名要大写
value1=`sqlplus -S "${orauser}/${orapasswd}@${sid}" << !
set heading off
set feedback off
set pagesize 0
set verify off
set echo off
set linesize 2000
set sqlblanklines on
select COLUMN_NAME||'~'||DATA_TYPE|