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. 三星Gear VR与Oculus Rift DK2全方位比拼

    网易数码1月6日消息,Oculus Rift DK2并不是面向消费者的产品,而三星Gear VR则进入了大众市场.虽然二者有点不同,但还是值得对比一番,看看Gear VR相比当下虚拟现实领域佼佼者Oc ...

  2. IT兄弟连 JavaWeb教程 Servlet会话跟踪 经典面试题

    1.描述Cookie的作用 Cookie是网站保存在浏览器客户端的信息,也就是说保存在访客的机器里的变量,一般随着HTTP头发送到客户端.在Cookie生效之后及失效之前,客户每次发出页面请求的时候, ...

  3. apringboot aop权限控制

    + 定义切面: ···@Aspect @Component public class LoginInterceptor { @Around("@annotation(lock)") ...

  4. iOS 8 录音重放出现 OSStatus error 1685348671 / 2003334207 问题的解决办法

    许多录音类 APP 都提供录音回放功能,大家在做这类 APP 的时候也经常会遇到这个需求.当大家用以前的套路在 iOS 8 上录音的时候,在模拟器上跑得挺好的,但是一上真机就跪了,为什么?因为真机底层 ...

  5. hadoop 2.5.1单机安装部署伪集群

    环境:ubuntu 14.04 server 64版本 hadoop 2.5.1 jdk 1.6 部署的步骤主要参考了http://blog.csdn.net/greensurfer/article/ ...

  6. CF446B DZY Loves Modification 【思维/优先队列】By cellur925

    题目传送门 题目大意:给一个 \(n*m\) 的矩阵,并进行 \(k\) 次操作,每次操作将矩阵的一行或一列的所有元素的值减 \(p\) ,得到的分数为这次修改之前这一列/一行的元素和,求分数最大值. ...

  7. IOS正则表达式 (身份证、电话、汉字等常用条件筛选)

    下面的正则列表   替换对应的正则规则 那个字符串就可以了  例如: //正则规则 NSString *regex = @"^((13[0-9])|(147)|(17[0-9])|(15[^ ...

  8. css-原理详解

    语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明: 选择器一般使用id或者class选择器,声明由{}包含,每条声明由一个属性和一个值组成. .city { float:left; ...

  9. base64模块

    ********base64模块******** Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很 ...

  10. dzzoffice 任意文件下载漏洞分析

    dzzoffice 任意文件下载 \updload\dzz\system\save.php第72行开始:    elseif($_GET['do']=='move'){    $obz=trim($_ ...