zoukankan      html  css  js  c++  java
  • Linux系统下shell脚本中执行sql

    怎么在shell脚本中执行sql?
    怎么把sql编程shell脚本放在服务器上自动跑数?
    请看正文~

    1.Oracle的常用set命令

    Oracle的常用set命令:

    set pagesize 0 #输出每页行数,缺省为24,为了避免分页,可设定为0。
    set linesize 2000 #输出一行字符个数,缺省为80
    set head off #数据库查询结果中不显示列标题,而是以空白行代替,也就是不显示字段名了
    set termout off #去除标准输出每行的拖尾空格,缺省为off
    set trims on  #去掉空字符
    set trim on #查询结果既显示于假脱机文件中,又在SQLPLUS中显示;
    set feed off # 同set feedback off,显示数量 当查询选择至少n条记录时,查询返回的记录。
    
    set newpage 0;#设置页与页之间的分隔。0时,会在每页的开头有一个小的黑方框;n时,会在页版和页之间隔着n个空行
    set space 0; #设置各列间的空格数,默认不用设置、不用写此参数
    set line 1000;  #设置行的长度
    set echo off;  #显示start启动的脚本中的每个sql命令,缺省为on
    set feedback off; #默认的当一条sql发出的时候,oracle会给一个反馈,比如说创建表的时候,如果成功命令行会返回类似:Table created的反馈,off后不显示反馈
    set feedback on;  #设置显示“已选择XX行”
    set heading off; #输出域标题,缺省为on;不显示表头信息
    set term off; #查询结果仅仅显示于假脱机文件中
    set termout off;  #不在屏幕上显示结果
    set trimout on; #每一显示行的末端去掉空格
    set trimspool on; #去除重定向(spool)输出每行的拖尾空格,缺省为off
    set timing off; #显示每条sql命令的耗时,缺省为off
    set timing on; #设置显示“已用时间:XXXX”
    set time on; #设置显示当前时间
    set trimout on; #去除标准输出每行的拖尾空格,缺省为off
    set autotrace on; #设置允许对执行的sql进行分析
    set colsep' '; #设置分隔符为空格
    set numwidth 12;  #输出number类型域长度,缺省为10
    set serveroutput on;  #设置允许显示输出类似dbms_output
    set verify off;  #可以关闭和打开提示确认信息old 1和new 1的显示.
    
    spool 路径+文件名   #记录数据到路径+文件名
    select ... from tablename; #导出数据SQL语句   
    spool off   #收集完毕
    

    2. 一个例子

    例子:

    #设置执行编码格式,防止导出中文时出现乱码
    export ORACLE_HOME=/oracle/product/10.2.0/db_1
    export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
    a=`date +%Y%m%d%H%M%S`
    b=`date +%Y%m%d`
    
    filename1=lp_0304_$b.xls
    
    echo "begin time:"`date +%Y%m%d%H%M%S` >> /服务器上的log目录路径/lp_0304_$a.log
    
    SQL1=`sqlplus -s 用户名/口令@数据库>/dev/null << END
    set pagesize 0
    set linesize 2000
    set head off
    set termout off
    set trims on
    set trim on
    set feed off
    
    ......sql
    
    spool $filename1 
    select '序号'||chr(9)||'号码'' from dual
    union all
    select /*+ parallel(a,12)*/
     a.id||chr(9)||
     a.serial_number
      from lp_0304_4 a;
    spool off
    /
    
    exit;
    END`
    echo "end time:"`date +%Y%m%d%H%M%S` >> /服务器日志目录/lp0304_$a.log
    mv $filename1 /服务器文件目录/file/
    

    可以用下面语句代替上面的某些部分,输出的文件显示不太一样,上面的语句生成的文件字段之间只有一个空格,且会有表头的字段名;下面的语句生成的文件字段之间会有很多空格,且没有字段名

    SET NEWPAGE 0; #设置页与页之间的分隔。
    SET SPACE 0; #设置各列间的空格数
    SET LINESIZE 2000; #输出一行字符个数,缺省为80
    SET PAGESIZE 0; #输出每页行数,缺省为24,为了避免分页,可设定为0。
    SET ECHO OFF; #显示start启动的脚本中的每个sql命令,缺省为on
    SET FEEDBACK OFF;#默认的当一条sql发出的时候,oracle会给一个反馈,比如说创建表的时候,如果成功命令行会返回类似:Table created的反馈,off后不显示反馈
    SET HEADING OFF; #输出域标题,缺省为on;不显示表头信息
    SET TERM OFF; #查询结果仅仅显示于假脱机文件中
    SET TRIMSPOOL ON; #去除重定向(spool)输出每行的拖尾空格,缺省为off
    SET TIMING OFF; #显示每条sql命令的耗时,缺省为off
    
    spool /目录/文件名.txt
    ......SQL语句......
    spool off;
    

  • 相关阅读:
    openssl用法详解
    单例模式
    __new__静态方法
    django自带加密模块的使用
    celery 框架
    理解RESTful架构
    [Swoole] 在Ubuntu下安装、快速开始
    [Javascript] 动态隐藏和显示 Layui 数据表格的列
    [PHP] CURL获取cookie,模拟登录获取数据
    [Python] 命令行模式阅读博客园的博文
  • 原文地址:https://www.cnblogs.com/lpeng94/p/12780790.html
Copyright © 2011-2022 走看看