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. Codeforces714C【映射】

    题意: T次操作: +的话就是往 multiset 塞进一个: -的话就是往 multiset 去除一个: ?操作 思路: +和-操作就是处理字符串直接实现一个原字符串改成"01" ...

  2. opencv surf特征点匹配拼接源码

    http://blog.csdn.net/huixingshao/article/details/42672073 /** * @file SURF_Homography * @brief SURF ...

  3. uoj#79. 一般图最大匹配(带花树)

    传送门 带花树 不加证明的说一下过程好了:每次从一个未匹配点\(S\)出发bfs,设\(S\)为\(1\)类点,如果当前点\(v\)在本次bfs中未经过,分为以下两种情况 1.\(v\)是未匹配点,那 ...

  4. Ruby测试小代码[计算50以内的素数]

    算法思想 判断某一个数,能不能被比他平方根小的素数整除. 首先看看代码 $arr = [] $arr[0] = 2 def add_prime(n) 3.step(n,2){|num| $arr &l ...

  5. 51Nod 1272 最大距离 (栈或贪心)

    #include <cstdio> #include <queue> #include <cstring> #include <iostream> #i ...

  6. POJ-3159-Candies-(差分约束,Dijkstra)

    链接:https://vjudge.net/problem/POJ-3159 题意: N个小孩,M个约束 以A,B,C给出.即小孩B的糖果不能比A多C以上. 思路: 差分约束: 若有 A-B < ...

  7. python之序列化json模块与pickle模块(待补充)

    一.json是所有语言都通用的一种序列化格式 只支持 : 列表,字典字符串,数字,且字典的key必须是字符串 ''' 1. dumps , loads 在内存中做数据转换: dumps : 数据类型 ...

  8. 物体检测丨Faster R-CNN详解

    这篇文章把Faster R-CNN的原理和实现阐述得非常清楚,于是我在读的时候顺便把他翻译成了中文,如果有错误的地方请大家指出. 原文:http://www.telesens.co/2018/03/1 ...

  9. 第八章 设计用户界面 之 给Web程序应用用户界面设计

    1. 概述 本章内容包括: 使用CSS创建和应用样式.使用HTML构架用户界面的层次 以及 根据需求实现动态页面内容. 2. 主要内容 2.1 使用CSS创建和应用样式 Razor程序的模板是_Lay ...

  10. HashMap之put方法流程解读

    说明:本文中所谈论的HashMap基于JDK 1.8版本源码进行分析和说明. HashMap的put方法算是HashMap中比较核心的功能了,复杂程度高但是算法巧妙,同时在上一版本的基础之上优化了存储 ...