我想在这个年代,没有几个开发人员会去使用sqlplus,这是多么原始的工具啊,不过,也许很多DBA喜欢,而我,真的不太喜欢,还是toad好用啊!但是用不幸,我不得用经常用sqlplus,在这里鄙视一下XX保险公司里面的安全部门,也许他们真的以为他们很有道理,也是他们是中国僵化的公司里面的正常存在,但是,我想说的是,你这么搞,安全也没有,工作效率还大大的降低!其实,应该给予开发人员,至少是核心开发人员足够的权限,如果担心安全,完全可以把操作的轨迹完全记录下来,事后问责,这才不是僵化的体制!而且,这也可以延伸到我们的政治、社会当中,形成一种事后问责制,才有利于社会保持足够的弹性和创新力。
屁话说多了!
向文件中导出大量数据
SQL> spool obj; /*导出到当前目录下obj.lst文件中*/
SQL> set heading off; --禁止输出列标题
SQL> set feedback off; --禁止显示最后一行的计数反馈信息
SQL> set pagesize 50000; --设置显示多少行打印一次列名
SQL> select * from tb_src;
1 13132520000
2 13132520001
3 13132520002
4 13132520003
5 13132520004
6 13132520005
7 13132520006
8 13132520007
9 13132520008
10 13132520009
SQL> spool off;
以文本形式下载表数据
oracle 缺乏将表中数据输出至文本文件的工具,因此只能利用sqlplus 和unix 工具做变通的处理
sqlplus –s dbuser/oracle <<EOF >/dev/null
set colsep |;
set echo off;
set feedback off;
set heading off;
set pagesize 0;
set linesize 1000;
set numwidth 12;
set termout off;
set trimout on;
set trimspool on;
spool tmp.txt;
select * from emp;
spool off;
exit
EOF
tr –d ‘ ‘ < tmp.txt >emp.txt 删除空格,可选
注意:一定要用spool,如果在命令行中直接用>tmp.txt 可能会造成数据缺失,至少在Unixware7 上如此。
假定某域是char(n),如中间出现回车\n,则下载出的这条记录的格式将会错乱,不宜采用此方法
平时查询的时候简单一点,下面够了
set serveroutput on size 1000000
set trimspool on
set long 5000
set linesize 100
set pagesize 9999
当然,还要经常查询表结构了
--oracle查询表结构
SELECT
column_name,
data_type,
data_length,
nullable
from
ALL_TAB_COLUMNS
where table_name = upper('t_clmvhl' )
表名一定要大写的喔。
---------------------------------------
让我们再鄙视一下所谓的安全部门吧!
导一个数据,我得经常两次telnet
还得经过一次su的,虽然伟大的SecureCRT很强大
但是跳过跳去,真的很烦