一位好兄弟前两天说某个老系统只能通过服务器上的sqlplus访问,所以提了几个和sqlplus相关的问题。官方或者第三方的图形化客户端,能简化我们的操作,然而不是所有的场景都可以使用。
问题1
中文还是什么的,显示问号,好像有数字类型的也显示问号,number(19,4)这种,好像显示5.????
一般都是数据库字符集和操作系统字符集不同,导致显示不同的问题,可以登录数据库,看下当前的语言字符集,
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
然后可以设置环境变量NLS_LANG,保证一致,
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
同样地,有些客户端,例如SecurCRT,可以设置会话的字符集,应该是相同道理。PLSQL Developer碰到这种问题,同样能解决,可以参考《PLSQL Developer中文乱码问题》。
问题2
查询结果导出excel文件,该怎么搞?
可以使用spool,如下所示,"spool+待存储的文件名"相当于开始,"spool off"之前的所有SQL和输出的结果集,都会写入到这个文件中,
spool test.csv
SQL...
spool off
还可以对输出进行格式化,可以参考《spool导出格式的问题》,通过sqlplus的显示控制,优化结果集展示,
set colsep' ' --行的标题列的分隔符
set linesize(line) --设置sqlplus输出的最大行宽
set pagesize --设置页面的最大行数 缺省为24,为了避免分页,可设定为0
set serveroutput on|off
set echo on --显示文件中的每条命令及其执行结果,缺省为on
set echo off --不显示文件中的命令,只显示其执行结果
set term on --查询结果既显示于假脱机文件中(spool指定输出的文件),又在SQLPLUS中显示
set term off --查询结果仅仅显示于假脱机文件中(spool指定输出的文件)
set heading off --让结果行的标题不显示,缺省为on
set heading on --让结果行的标题显示
set trimout on --去除标准输出每行的拖尾空格,缺省为off
set trimspool on --去除重定向(spool)输出每行的拖尾空格,缺省为off
set timing off --显示每条sql命令的耗时,缺省为off
set verify off --是否显示替代变量被替代前后的语句
问题3
查询出来的东西,没几列,长度不宽,但是换行很严重,基本没法看,怎么能让输出格式化一下?
举个例子,dba_tables视图中owner定义为varchar2(128),table_name定义为varchar2(128),
如果直接写owner和table_name,就像这种,折行显示了,
此时可通过col设置owner列宽度为15,设置table_name列宽度为35,显示就正常了,
官方或者第三方的图形化客户端软件,从操作上,确实更简单,但是有时候,受限于客观条件,不一定能用,而且图形化软件最明显的问题,就是屏蔽了很多操作的细节,如果只是"用",其实是够了,但如果需要更深入的了解数据库,命令行的一些操作还是可以了解掌握的,而且如果用熟了,可能会相对与图形客户端更直接。