Shell脚本调用SQL文格式

1. 定义需要执行的SQL文,以及需要输出文件

OUTFILE=\${DATADIR}/\${FILENAME}

SQLFILE=\${DATADIR}/check_tradedetail.sql

2. 设置需要执行的SQL文

echo -n "

select tr.id || ',' || m.merchant_code || ',' || m.merchant_name || ',' || to_char(tr.trade_start_time, 'yyyy-mm-dd hh24:mi:ss')

|| ',' || tt.name || ',' || tr.bank_code || ',' ||  tr.fld3 || ',' ||

tr.trade_sum || ',' ||

case when tr.status = 0 then '待处理'

when tr.status = 1 then '处理中'

when tr.status = 2 then '成功'

when tr.status = 3 then '失败'

when tr.status = 4 then '待确认' end

from tvpay2.trade_record tr join tvpay2.merchant m on tr.provider_id = m.id

join tvpay2.trade_type tt on tr.trade_code = tt.code

where to_char(tr.fiscal_date, 'yyyyMMdd') = ${date} order by tr.trade_start_time;

" > $SQLFILE

echo -n "
select ''''||a.merchant_code || ',' || a.merchant_name || ',''' || a.id  
|| ','  || (a.balance + nvl(b.acc, 0))  || ','  || (a.withdrawable_balance + nvl(b.acc, 0)) || ',' ||  a.frozen_balance   from
(select tu.merchant_code, tu.merchant_name, a.* from tvpay2.account a join tvpay2.merchant_account_association ua
on a.id = ua.account_id join tvpay2.merchant tu on ua.merchant_id = tu.id ) a
left join
(select v.account_id, sum(v.credited - v.debited) as acc from tvpay2.voucher v  
where v.create_time <= to_date('\$input_datetime', 'yyyymmdd hh24:mi:ss') group by v.account_id)  b
on a.id = b.account_id where a.balance + nvl(b.acc, 0) > 0;
" > \$SQLFILE1

#备注 ||表示分隔符  ‘,’用于分隔字段使用 其中‘’‘’为了在第一个字段中添加'号,另外‘、'\"’可以添加“号,这个可以用来解决文本文件,转换成csv格式时,数字错乱问题。

3. 输出文件格式设置及其执行SQL文

##set colsep' ';        //域输出分隔符

##set numwidth 25 ;     //输出number类型域长度,缺省为10

##set linesize 300;     //输出一行字符个数,缺省为80

##set pagesize 0;       //输出每页行数,缺省为24,为了避免分页,可设定为0,设为0后无域标题。

##set echo off;                //显示start启动的脚本中的每个sql命令,缺省为on

##set newpage none;          //页与页之间的分隔符

##set termout off;      //显示脚本中的命令的执行结果,缺省为on

##set trimout on;              //去除标准输出每行的拖尾空格,缺省为off

##set trimspool on;     //去除重定向(spool)输出每行的拖尾空格,缺省为off

##set serveroutput on;  //设置允许显示输出类似dbms_output

##set timing on;        //设置显示“已用时间:XXXX”

##set verify off;       //可以关闭和打开提示确认信息old 1和new 1的显示.

##set heading off;    //输出域标题,缺省为on

##set feedback off;     //回显本次sql命令处理的记录条数,缺省为on

##alter session set nls_date_format='YYYY-MM-DD_HH24:MI:SS';

sqlplus /nolog <<!

conn user/password@ORCL

set numwidth 25

set linesize 300

set pagesize 0

set echo off

set heading off

set newpage none

set termout off

set trimout on

set trimspool on

set serveroutput off

set timing off

set verify off

set feedback off

spool ${OUTFILE};

@${SQLFILE};

spool off;

!

4.格式化输出文件

sed -i '/SQL/d' \$OUTFILE1
sed -i '/---/d' \$OUTFILE1
sed -i 's/\ \ //g' \$OUTFILE1
sed -i '/^\$/d' \$OUTFILE1

5.将文本格式转换为csv格式

iconv -f "utf-8" -t "gbk" \${OUTFILE1} > OUTFILE1.csv

Shell脚本调用SQL文格式的更多相关文章

  1. 基于sparksql调用shell脚本运行SQL

    [Author]: kwu 基于sparksql调用shell脚本运行SQL,sparksql提供了类似hive中的 -e  , -f ,-i的选项 1.定时调用脚本 #!/bin/sh # uplo ...

  2. shell脚本调用spark-sql

    为了更方便的查询并产生报表, 需要使用shell脚本调用spark-sql spark/bin/spark-sql --master spark://host:7077 -f ${SQL_FILE} ...

  3. shell脚本调用C语言之字符串切分之strtok函数

    今天上午在写一个需求,要求的比较急,要求当天完成,我大致分析了一下,可以采用从shell脚本中插入一连串的日期,通过调用proc生成的可执行文件,将日期传入后台数据库,在数据库中进行计算.需要切分日期 ...

  4. shell脚本调用C语言之字符串切分函数——strtok

    今天上午在写一个需求,要求的比较急,要求当天完成,我大致分析了一下,可以采用从shell脚本中插入一连串的日期,通过调用proc生成的可执行文件,将日期传入后台数据库,在数据库中进行计算.需要切分日期 ...

  5. Shell脚本调用ftp上传文件

    Shell脚本调用ftp上传文件 1.脚本如下 ftp -n<<! open x.x.x.x ###x.x.x.x为ftp地址 user username password ###user ...

  6. Miniconda 安装 & Pip module 安装 & Shell 脚本调用 Miniconda 虚拟环境手册(实战项目应用)

    (实战项目应用) 1. 下载Miniconda 两个安装方式: 方式1:wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Min ...

  7. MySql创建函数与过程,触发器, shell脚本与sql的相互调用。

    一:函数 1:创建数据库和表deptartment, mysql> use DBSC; Database changed mysql), ), )); Query OK, rows affect ...

  8. linux下crontab定时执行shell脚本调用oracle 存储过程

    问题:脚本内调用存储过程,脚本直接执行没问题,使用crontab 执行脚本存储过程未执行 原因:缺少oracle环境变量 解决:在shell脚本里添加oracle的环境变量 #!/bin/sh PAT ...

  9. shell脚本调用python脚本的路径问题

    脚本的相互调用中,只有在同一级目录下才可以使用__file__参数去获取路径名,(在shell里使用pwd也同样),否则,使用的就是主文件(最开始运行的脚本程序)的所在位置,是错误路径:一定要注意当期 ...

随机推荐

  1. hoj2188 WordStack

    WordStack My Tags   (Edit)   Source : Mid-Atlantic 2005   Time limit : 5 sec   Memory limit : 32 M S ...

  2. [Xcode 实际操作]八、网络与多线程-(1)使用Reachability类库检测网络的连接状态

    目录:[Swift]Xcode实际操作 本文将演示如何使用Reachability网络状态检测库,检测设备的网络连接状态. 需要下载一个开源的类库:[ashleymills/Reachability. ...

  3. [Xcode 实际操作]九、实用进阶-(25)使用Storyboard(故事版)的约束功能,使项目快速适配各种分辨率的设备

    目录:[Swift]Xcode实际操作 本文将演示使用故事版的约束功能,使项目快速适配各种分辨率的设备. 在项目导航区打开并编辑主故事版[Main.storyboard]. 在当前故事版中,已经存在一 ...

  4. 微信小程序云开发之云函数的创建与环境配置

    云函数的使用与环境配置: 1.创建云函数 右键cloudfunctions文件选择新建Node.js云函数,云函数命名为updateVoice用于修改用户语音数量. 2.安装node.js及npm: ...

  5. idea svn 问题

    https://blog.csdn.net/liyantianmin/article/details/52837506

  6. 编译出现No rule to make target `out/host/linux-x86/bin/aapt', needed by `out/target/common/obj/APPS/MyTv4_intermediates/src/R.stamp'问题

    查找路径发现的确没有MyTv4_intermediates/src/R.stamp,这需要生成这个文件

  7. bzoj1130:[POI2008]POD Subdivision of Kingdom

    传送门 看到数据范围这么小,不由得算了一下暴力复杂度,算出来情况一共只有1e7,不多,再乘上暴力判断的复杂度,好像T了,判断的话位运算可以方便解决 但是我写的优化似乎比较渣,还留了个log,但是还是n ...

  8. centos 无界面 服务器 安装chrome部署chromedriver

    转:https://blog.csdn.net/u013849486/article/details/79466359 基本 做完了,要弄进docker里面去了的时候,才搜到 docker-chrom ...

  9. 洛谷 P2662 牛场围栏

    做法是这样的: 首先暴力把所有可能的边长搞出来..(当然<=0的不要) 排序边长+去重, 当且仅当可行边长里面有1时,任何长度都能取到,输出-1 当且仅当所有可行边长的gcd大于1时,不能取到的 ...

  10. SimpleDateFormat 如何安全的使用?

     前言 为什么会写这篇文章?因为这些天在看<阿里巴巴开发手册详尽版>,没看过的可以关注微信公众号:zhisheng,回复关键字:阿里巴巴开发手册详尽版 就可以获得. 关注我 转载请务必注明 ...