精华内容
下载资源
问答
  • Oracle 10g中SPOOL内容追加至文件,SPOOL内容,性能调优以前在SQLPLUS中运行脚本时用SPOOL保存运行结果, 可是SPOOL每次都将原来的文件覆盖了, 现在有了10g就没这个问题了: e:>sql...
    Oracle 10g中SPOOL内容追加至文件,SPOOL内容,性能调优
    以前在SQLPLUS中运行脚本时用SPOOL保存运行结果, 可是SPOOL每次都将原来的文件覆盖了, 现在有了10g就没这个问题了 :


    e: > sqlplus xsb @tns1 SQL * Plus: Release 10.1 . 0.2 . 0 - Production on
    星期四 4月 13 15 : 24 : 36 2006 Copyright (c) 1982 , 2004 , Oracle. All rights reserved.Connected to :
    Oracle Database 10g Enterprise Edition Release 10.2 . 0.1 . 0 - Production With the Partitioning,
    OLAP and Data Mining optionsSQL > spool 1 .txt
    SQL > select * from v$version;
    BANNER -- -----------------------------------
    --------------------------- Oracle Database 10g
    Enterprise Edition Release 10.2 . 0.1 . 0 - ProdPL / SQL
    Release 10.2 . 0.1 . 0 - ProductionCORE 10.2 . 0.1 . 0 ProductionTNS for 32 - bit Windows: Version 10.2 . 0.1 . 0 - ProductionNLSRTL Version 10.2 . 0.1 . 0 - ProductionSQL > spool off SQL > spool append 1 .txtSP2 - 0108 :
    The filenames CREATE , REPLACE , APPEND, FILE , and abbreviations may not be used.SP2 - 0769 : Usage:
    SPOOL { < file > | OFF | OUT } where < file > is file_name [ .ext ] [ CRE[ATE ] | REP [ LACE ] | APP [ END ] ]
    SQL > spool 1 .txt appendSQL > select * from v$version;
    BANNER -- -------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2 . 0.1 . 0 -
    ProdPL / SQL Release 10.2 . 0.1 . 0 - ProductionCORE 10.2 . 0.1 . 0 ProductionTNS for 32 - bit Windows: Version 10.2 . 0.1 . 0 - ProductionNLSRTL Version 10.2 . 0.1 . 0 - ProductionSQL > spool off


    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-122154/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/10294527/viewspace-122154/

    展开全文
  • 于是猜想把数据中的日期改成yyyy-mm-dd的形式,修改oraclespool.sql脚本,把日期格式改成yyyy-mm-dd的形式。 [oracle11@S248 ~]$ cat spool.sql set colsep '|' SET feedback off SET newpage ...
    有个需求要从oracle把数据倒进mysql,
    方法一:用spool导成txt文件,然后load进去mysql
    oracle源端:spool配置
    [oracle11@S248 ~]$ cat spool_bak.sql
    set colsep '|'
    SET feedback off
    SET newpage none
    SET pagesize 50000
    SET linesize 20000
    SET verify off
    SET pagesize 0
    SET term off
    SET trims ON
    SET heading off
    SET trimspool ON
    SET trimout ON
    SET timing off
    SET verify off
    spool /oracle/spool1.txt
    select swebid,dstart from liuwenhe.fukuandate where dstart is not null and swebid is not null ;
    spool off
    EOF
    运行spool文件,生成txt文件
    SQL> @spool_bak.sql
    把生成的txt文件传到mysql服务器下。
    然后执行load进去mysql
    mysql> LOAD DATA INFILE 'C:\\Users\\manet\\Desktop\\spool.txt' INTO TABLE fukuandate FIELDS TERMINATED BY "|"
    不幸的是报错:
    Incorrect datetime value: '15-SEP-15' for column 'DSTART' at row 1
    很明显是日期格式的问题,查看导出来的txt文件内容:
    [oracle11@S248 ~]$ cat spool1.txt
    403965|15-SEP-15
    442917|01-AUG-16
    然而mysql的默认日期格式:为yyy-mm-dd
    mysql> show variables like 'datetime_format'; ####查看mysql的默认格式
    +-----------------+-------------------+
    | Variable_name | Value |
    +-----------------+-------------------+
    | datetime_format | %Y-%m-%d %H:%i:%s |
    +-----------------+-------------------+
    1 row in set (0.00 sec)
    mysql> SELECT NOW() FROM DUAL;
    +---------------------+
    | NOW() |
    +---------------------+
    | 2017-03-03 13:32:18 |
    +---------------------+
    1 row in set (0.00 sec)
    于是猜想把数据中的日期改成yyyy-mm-dd的形式,修改oraclespool.sql脚本,把日期格式改成yyyy-mm-dd的形式。
    [oracle11@S248 ~]$ cat spool.sql
    set colsep '|'
    SET feedback off
    SET newpage none
    SET pagesize 50000
    SET linesize 20000
    SET verify off
    SET pagesize 0
    SET term off
    SET trims ON
    SET heading off
    SET trimspool ON
    SET trimout ON
    SET timing off
    SET verify off
    spool /oracle/spool.txt
    select swebid, to_char(dstart,'yyyy-mm-dd') from liuwenhe.fukuandate where dstart is not null and swebid is not null;
    spool off
    EOF
    然后从新执行spool.sql脚本,新生成的txt文件,再次load进去,成功了。。
    mysql> LOAD DATA INFILE 'C:\\Users\\manet\\Desktop\\spool.txt' INTO TABLE fukuandate FIELDS TERMINATED BY "|"
    共 73506 行受到影响
    方法二:注意这种方法仅仅适合于数据量比较小的情况,因为数据量大的话,你没办法编辑sql文件。用plsql developer 工具导成sql文件,然后修改sql文件,倒进mysql。
    在plsql developer 工具里,在左侧找到需要导出的表,然后-右击-选择导出数据,之后选择路径,如下图:
    然后编辑导出的sql文件,使它能正确的在mysql中执行,to_date替换成STR_TO_DATE
    insert into FUKUANDATE (SWEBID, DSTART)
    values (403965, to_date('15-09-2015', 'dd-mm-yyyy'));
    改成:
    INSERT INTO FUKUANDATE (SWEBID, DSTART) VALUES (403965, STR_TO_DATE('15-09-2015','%d-%m-%Y'));

    然后执行即可,

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29654823/viewspace-2134655/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/29654823/viewspace-2134655/

    展开全文
  • oracle中spool将查询的数据写入文件

    千次阅读 2013-07-25 15:12:34
    要输出符合要求格式的数据文件只需在select时用字符连接来规范格式。比如有如下表: SQL>; select id,username,password from myuser;//测试表 1 John 1234 2 Jack 12345 3 Rose 2345 4 Joe 384657 ...

    要输出符合要求格式的数据文件只需在select时用字符连接来规范格式。比如有如下表:

    SQL>; select id,username,password from myuser;//测试表
    1 John       1234
    2 Jack       12345
    3 Rose       2345
    4 Joe        384657
    5 Tom        384655
    6 Jordan     384455

    要输出符合1,John,1234,这样的数据格式就用select id||','||username||','||password||',' from myuser这样的语句。

    SQL>; select id||','||username||','||password||',' from myuser;
    1,John,1234,
    2,Jack,12345,

    写个下面这样的脚本就行可以输出符合要求格式的数据至文件中,不会含有其它不需要东西,只有数据部分。

    --脚本文件名为expmyusr.sql,存数据的文件名为e:\exp.txt

    set echo on            --是否显示执行的命令内容  
    set feedback off       --是否显示 *   rows   selected  
    set heading off        --是否显示字段的名称
    set verify off         --是否显示替代变量被替代前后的语句。fil
    set trimspool off      --去字段空格
    set pagesize 1000      --页面大小
    set linesize 50//linesize设定尽量根据需要来设定,大了生成的文件也大
    define fil= 'e:\exp.txt'
    prompt *** Spooling to &fil
    spool &fil
    select id||','||username||','||'"'||password||'"' from myuser;
    spool off;
    
    
    --执行过程
    SQL>; @e:\expmyusr.sql
    *** Spooling to e:\exp.txt
    1,John,"1234"
    2,Jack,"12345"
    3,Rose,"2345"
    4,Joe,"384657"
    5,Tom,"384655"
    6,Jordan,"384455"
    PS. 在以上的过程中 ,不知道为什么不能先定义文件的位置,否则系统将报 "I/Oerror 32" 的错误,所以正确的代码是直接写好文件存储的路径

    检查可知结果符合要求。

    Oracle SPOOL的两种方法之对比 

    通常情况下,我们使用SPOOL方法,将数据库中的表导出为文本文件的时候会采用两种方法,如下述:

    方法一:采用以下格式脚本 

    set colsep '' ------设置列分隔符
    set trimspool on
    set linesize 120
    set pagesize 2000
    set newpage 1
    set heading off
    set term off
    spool 路径+文件名
    select * from tablename;
    spool off

    方法二:采用以下脚本
    set trimspool on
    set linesize 120
    set pagesize 2000
    set newpage 1
    set heading off
    set term off
    spool 路径+文件名
    select col1||','||col2||','||col3||','||col4||'..' from tablename;
    spool off

    比较以上方法,即方法一采用设定分隔符然后由sqlplus自己使用设定的分隔符对字段进行分割,方法二将分隔符拼接在SELECT语句中,即手工控制输出格式。

    在实践中,我发现通过方法一导出来的数据具有很大的不确定性,这种方法导出来的数据再由sql ldr导入的时候出错的可能性在95%以上,尤其对大批量的数据表,如100万条记录的表更是如此,而且导出的数据文件狂大。

    而方法二导出的数据文件格式很规整,数据文件的大小可能是方法一的1/4左右。经这种方法导出来的数据文件再由sqlldr导入时,出错的可能性很小,基本都可以导入成功。

    因此,实践中我建议大家使用方法二手工去控制spool文件的格式,这样可以减小出错的可能性,避免走很多弯路。



    展开全文
  • Oracle中SPOOL命令使用方法详解

    万次阅读 2018-08-31 17:26:39
    举例:test.sh  代码如下 复制代码 #! /bin/sh sqlplus -s scott/tiger&lt;&lt;EOF  set head off  set linesize 20000  set echo off  set feedback off ... ...

    举例:test.sh

     代码如下复制代码

    #! /bin/sh

    sqlplus -s scott/tiger<<EOF
     set head off
     set linesize 20000
     set echo off
     set feedback off
     set pagesize 0
     set termout off
     set trimout on
     set trimspool on
      spool /home/test.txt
       select empno || '|' || ename || '|' || job || '|' || 
       mgr || '|' || hiredate || '|' || sal || '|' || 
       comm || '|' || deptno from emp;
      spool off
      exit;
    EOF

    spool常用的设置:
    set head off:输出域标题,缺省为on
    set linesize 20000:linesize可以设置的大点,防止一行长度不够
    set echo off:显示sqlplus中的每个sql命令本身,缺省为on
    set feedback off:回显本次sql命令处理的记录条数,缺省为on
    set pagesize 0:输出每页行数,缺省为24,为了避免分页,可设定为0
    set termout off:显示脚本中的命令的执行结果,缺省为on
    set trimout on:去除标准输出每行的拖尾空格,缺省为off
    set trimspool on:去除重定向(spool)输出每行的拖尾空格,缺省为off

    补充:pool命令实现的两种方法比较

    要输出符合要求格式的数据文件只需在select时用字符连接来规范格式。比如有如下表

     代码如下复制代码


    SQL>; select id,username,password from myuser;//测试表
    1 John       1234
    2 Jack       12345
    3 Rose       2345
    4 Joe        384657
    5 Tom        384655
    6 Jordan     384455

    要输出符合1,John,1234,这样的数据格式就用select id||','||username||','||password||',' from myuser这样的语句。

     代码如下复制代码

    SQL>; select id||','||username||','||password||',' from myuser;
    1,John,1234,
    2,Jack,12345,

    写个下面这样的脚本就行可以输出符合要求格式的数据至文件中,不会含有其它不需要东西,只有数据部分。


    --脚本文件名为expmyusr.sql,存数据的文件名为e:\exp.txt

     代码如下复制代码

    set echo on            --是否显示执行的命令内容  
    set feedback off       --是否显示 *   rows   selected  
    set heading off        --是否显示字段的名称
    set verify off         --是否显示替代变量被替代前后的语句。fil
    set trimspool off      --去字段空格
    set pagesize 1000      --页面大小
    set linesize 50//linesize设定尽量根据需要来设定,大了生成的文件也大
    define fil= 'e:\exp.txt'
    prompt *** Spooling to &fil
    spool &fil
    select id||','||username||','||'"'||password||'"' from myuser;
    spool off;

    --执行过程
    SQL>; @e:\expmyusr.sql
    *** Spooling to e:\exp.txt
    1,John,"1234"
    2,Jack,"12345"
    3,Rose,"2345"
    4,Joe,"384657"
    5,Tom,"384655"
    6,Jordan,"384455"

    检查可知结果符合要求。

    Oracle SPOOL的两种方法之对比

    通常情况下,我们使用SPOOL方法,将数据库中的表导出为文本文件的时候会采用两种方法,如下述:

    方法一:采用以下格式脚本 

     代码如下复制代码

    set colsep '' ------设置列分隔符
    set trimspool on
    set linesize 120
    set pagesize 2000
    set newpage 1
    set heading off
    set term off
    spool 路径+文件名
    select * from tablename;
    spool off

    方法二:采用以下脚本

     代码如下复制代码

    set trimspool on
    set linesize 120
    set pagesize 2000
    set newpage 1
    set heading off
    set term off
    spool 路径+文件名
    select col1||','||col2||','||col3||','||col4||'..' from tablename;
    spool off

    比较以上方法,即方法一采用设定分隔符然后由sqlplus自己使用设定的分隔符对字段进行分割,方法二将分隔符拼接在SELECT语句中,即手工控制输出格式。


    在实践中,我发现通过方法一导出来的数据具有很大的不确定性,这种方法导出来的数据再由sql ldr导入的时候出错的可能性在95%以上,尤其?大批量的数据表,如100万条记录的表更是如此,而且导出的数据文件狂大。


    而方法二导出的数据文件格式很规整,数据文件的大小可能是方法一的1/4左右。经这种方法导出来的数据文件再由sqlldr导入时,出错的可能性很小,基本都可以导入成功。


    因此,实践中我建议大家使用方法二手工去控制spool文件的格式,这样可以减小出错的可能性,避免走很多弯路。

    展开全文
  • 1.spool的作用是什么? spool的作用可以用一句话来描述:在sqlplus中用来保存或打印查询结果。 2.spool在oracle 9i、10g和11g下的语法及使用示例 oracle 9i spool语法 SPO[OL] [file_name[....
  • ORACLE SPOOL

    2013-04-12 09:39:06
    关于SPOOL(SPOOL是SQLPLUS的命令,不是SQL语法里面的东西。) 对于SPOOL数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句如: select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number...
  • oracle的Spool命令

    千次阅读 2015-02-13 18:12:51
    使用spool命令实行将sql*plus中的输出的结果复制到一个指定的文件中,或者把查询的结果 发送到打印机中,直接使用spool off命令为止。 spool命令的语法如下: spool [file_name [create|replace|append] off|out]...
  • oracle中spool的用法小结

    千次阅读 2011-08-19 02:31:12
    在生产中常会遇到需要将数量比较大的表值导入到本地文本文件中. 方法有很多种,比较常用的就是spool命令: 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式。比如有如下表  SQL>;...

空空如也

空空如也

1
收藏数 8
精华内容 3
关键字:

oraclespool