shell脚本中spool生成excel文件写法

shell脚本中spool生成excel文件写法,第1张

在Web项目中,我们经常会遇到Excel表格导出的功能,对于一些数据实时性要求不高的、逻辑相对简单的导出,是否可用通过shell脚本的方式来进行导出,从而降低开发成本呢?

我们都知道,CSV格式可以用Excel表打开,且CSV格式的本质是以“,”为分隔符的文本,那么我们在sql的字段之间加入","即可以CSV格式的文件进行输出。

下面,我们使用shell脚本来实现:

#!/bin/bash

#文件保存路径

exportdata_dir = /data/export

#获取日期

dd = `data + %Y%m%d`

#数据库信息

#数据库用户名

username = 'root'

#数据库密码 可以放在文件内

password = 'root'

#数据库名

database_name = 'export_test'

#数据库之地

host = '127.0.0.1'

#如果文件夹不存在则创建

if [ ! -d $exportdata_dir ]

then

mkdir -p $exportdata_dir

fi

如果是windows,增加环境变量的方法,控制面板->性能和维护->系统->高级->环境变量->用户变量->新建->变量名为NLS_LANG变量值为AMERICAN_AMERICA.UTF-8。

如果是UNIX,则打开对应用户的profile文件,如Linux下是.bash_profile,HP-UX是.profile,加入exportNLS_LANG=AMERICAN_AMERICA.UTF-8。

一般来说,oracle数据导出spool方式,中文出现乱码,这情况是因为数据库服务器和客户端字符集不匹配,执行sqlplus的机器就是客户端,服务器和客户端也可能是一台机器,执行sqlplus之前要先设置客户端的字符集,在linux上:export NLS_LANG=.......

在windows上set NLS_LANG查询数据库字符集:select property_value from database_properties where property_name like 'NLS_CHAR%'

1、比如查询结果是:ZHS16GBK

那你在sqlplus之前要设置:export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

然后再登录sqlplus用spool生成数据

检查下你导出时候的环境变量,导入时的环境变量

2、比如导出时NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

导入时NLS_LANG没有设置,或者设置为其他字符集,则导入的库内汉字就有可能变成乱码。

解决方法,连接数据库的时候设置正确字符集即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8005621.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存