• 【SQL】ORACLE在sqlplus中使用spool方式生成建表语句


      在实际生产中有时我们需要将一张表的数据导入到另外一张表,如果有PLSQL,我们可以通过PLSQL工具将数据导出为sql脚本,然后再在另外一个数据库中执行这个脚本。但有时在实际生产中我们没有PLSQL这个工具,而且PLSQL的导出工具也不是特别好用。这时我们可以通过sqlplus中的spool工具,将我们需要的数据导出为sql建表脚本。

      spool工具是将我们在sqlplus中的输出写入自己需要的文件中,如此也就是说,我们通过查询,将查询结果输出为建表语句,然后将这些语句输出到sql脚本中即可。

      假设我们有一个pay1表,里面有“ID”,“NAME”,“AMOUNT”3个字段,我们需要将这个表的数据导出为pay2表的插入语句。具体实现如下:

      在sqlplus中依次执行下面语句

    set heading off
    set feedback off
    set term off
    

      这一部分是对spool 的写入数据进行控制

    spool d:sqlpay.sql  ---将结果写入到pay.sql中
    

      

    select 'INSERT INTO pay2 (id2,nam2,amount2) VALUES('||chr(39)||ID||chr(39)||','||chr(39)||NAME||chr(39)||','||chr(39)||AMOUNT||chr(39)||');' FROM pay1 order by ID; 
    

      这是配插入语句的。其中  ||  是拼接符,将字符串和字段连接起来;chr(39)是Unicode字符中的单引号,由于无法进行转义,所以用chr(39)代替;两个单引号中间的逗号是字符串;ID、NAME、AMOUNT是pay1表的字段;id2、nam2、amount2是pay2表的字段。由于配插入语句较为麻烦,所以建议在其他地方写完之后再复制粘贴到sqlplus中,注意中间不要有换行符。

    spool off   ----输入这句之后才会将结果写入到pay.sql中,否则pay.sql是空的
    

      

    由于spool会将所有信息都写入到pay.sql中,所以pay.sql会有一些多余的信息不能直接使用,需要对其进行修改之后再使用。但我认为这个修改是可以避免的,由于我本人对spool不是特别了解,所以希望有对spool了解的朋友能在评论区告知一二。

      

  • 相关阅读:
    postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    常见的http response
    ==容易错误的例子
    点击panel滚动条滚动到底部
    fabric实现文本聚焦、可编辑
    JSON.parse()和JSON.stringify()的使用
    centos7安装mysql
    阿里云第一次访问tomcat非常慢的解决办法
    java中的语法糖
    jvm | 基于栈的解释器执行过程
  • 原文地址:https://www.cnblogs.com/contixue/p/7363497.html
Copyright © 2020-2023  润新知