杂记:


因工作需要用到了SQLPLUS的脚本,碰到了非常奇葩的错误,SP2-0606,作为新时代的青年,我以饱含热情的姿态去向干妈度娘请教;太不是人了,很多的百度内容都是一样的,看的我脑子嗡嗡的,差一点直接GG了;但是我作为男生一向贯彻坚持不懈((*^▽^*)你懂的)原则,看到了一个外国友人的答案,说的是正常情况下spool定向输出内容是不会报错的,说的太他妹有道理了,当时瞬间云销雨霁,智商爆棚,就是没有告诉解决办法,我要亲切的问候一声他的妹妹;我算是看明白了,还得靠自己啊。

我把所有的情况都考虑了一遍,但是权限的问题忽略了,因为正常我们的oracle不会放在root用户下,如果放在oracle用户下,当我们用自己的用户,或者oracle用户去执行脚本,如果我们把输出的内容重定向到自己的用户下,或者其他用户,则会出现权限问题;也就是说保存的默认路径是在oracle用户下,所以如果在linux系统下,权限是真的有严格的要求。

反思一下:以后如果在linux系统下如果涉及到了多用户,权限问题是必须考虑的问题。

下面是一位前辈的心得:

在生产中常会遇到需要将数量比较大的表值导入到本地文本文件中. 方法有很多种,比较常用的就是spool命令: 要输出符合要求格式的数据文件只需在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         --是否显示替代变量被替代前后的语句。

filset 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

&nb

sp;  方法二:采用以下脚本

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文件的格式,这样可以减小出错的可能性,避免走很多弯路。

SQLPLUS报错:SP2-0606相关推荐

  1. sqlplus报错ORA-12547: TNS:lost contact解决

    sqlplus报错ORA-12547: TNS:lost contact解决 1. 报错 2. strace定位 3. 解决 Oracle 19c RAC for Linux二节点sqlplus登录数 ...

  2. 11g sqlplus报错ORA-28002: the password will expire within 3 days 的解决方法

    11g 增加了登录时间的限制,在DEFAULT Profile里能查到,如下所示: SQL> select * from dba_profiles where profile='DEFAULT' ...

  3. Oracle报错宗介

    注意:本文内容基本无sqlnet.ora的情况.关于sqlnet.ora,详见:监听中sqlnet.ora的作用 本地命名的配置:.本地名可以用简单的名称访问到所需的数据库或服务器所需的信息,而这些信 ...

  4. oracle加as报错,【Oracle】-【sqlplus / as sysdba登录报错问题】-新用

    [Oracle]-[sqlplus / as sysdba登录报错问题]-新用户使用sqlplus / as sysdba登录报错解决 [Oracle]-[sqlplus / as sysdba登录报 ...

  5. sqlplus / as sysdba报错ORA-01031: insufficient privileges

    使用sqlplus "/ as sysdba"连DB,报错:ORA-01031: insufficient privileges [oracle@bej301441 lib]$ s ...

  6. windows 2003 sp2补丁导致的isa各类报错问题:***无法连接 651报错等

    公司服务器安全整改测评,发现isa服务器的系统是windows server 2003 sp1不满足安全需要.所以要进行sp2补丁升级.升级后发现原来发布到internet的服务器都无法连接,具体故障 ...

  7. Windows Server 2003 sp1升级到sp2报错解决办法

    Windows Server 2003 sp1升级到sp2报错解决办法 [问题描述]今天利用360安全卫士,检测Windows Server 2003 sp1更新包,并升级到sp2时,报如下错误: [ ...

  8. windows server 2012 用sysdba登录报错 ORA-01031

    报错显示: C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期三 4 ...

  9. oracle报错ora-12162,ORA-12162: TNS: 指定的 Net 服务名不正确

    SQL> connect /as sysdba ERROR: ORA-12162: TNS: 指定的 Net 服务名不正确 原因: 1:.bash_profile文件中估计没有正确设置ORACL ...

最新文章

  1. 3D视觉原理之深度暗示(即立体感)
  2. Struts2学习第二天——动态方法调用
  3. 七周七并发之线程与锁
  4. Ubuntu 无线密码破解利器aircrack-ng
  5. 如何在 Linux 中启用 Shell 脚本的调试模式
  6. stl中unordered_map 和 map的区别 ?
  7. mysql 对库中表授权_对mysql数据库的授权和使用AND案例
  8. Windows10 安装 Twisted
  9. android builder布局方式,android – AlertDialog.Builder与自定义布局和EditText;无法访问视图...
  10. oracle上浮下浮分析函数_Oracle分析函数简析
  11. Pivot与Center的区别
  12. 软件测试--面试时怎么介绍前公司的项目经验
  13. # Codeforces Round #722(div2)D. Kavi on Pairing Duty
  14. 桌面的文件不见了怎么找出来
  15. 直属领导和老板都给了我绩效A,HR最后审核时降成了B,平时没有得罪她,她为什么这么做?...
  16. 计算机sci期刊必需要提交原始数据,sci期刊会向作者索要原始数据吗
  17. 计算机网络 『MAC帧格式、MAC地址』
  18. Python量化交易系统构建(一)
  19. harvest(10)
  20. [网络工程师]-IEEE 802系列协议

热门文章

  1. python做图像识别该学什么,opencv-python——图像识别入门学习(1)
  2. 智能家居行业的玩家有什么特点?智汀智能家居小总结
  3. 聚合索引(clustered index) 和 非聚合索引(nonclustered index)
  4. 嵌入式软件架构设计-状态机
  5. 超赞!阿里资深P9架构师总结出第一本《Java异步编程实战》
  6. 【Vue】模板语法 —— 表达式、插值、指令
  7. [图表]pyecharts模块-日历图
  8. 梯度下降算法被高估了!了解有趣的无梯度神经网络优化方法
  9. android启动器开发,Android启动器(Launcher)开发详解
  10. 淘晶驰 usart hmi( 串口屏)介绍