SQL>set colsep' '; //-域输出分隔符
SQL>set newp none //设置查询出来的数据分多少页显示,如果需要连续的数据,中间不要出现空行就把newp设置为none,这样输出的数据行都是连续的,中间没有空行之类的
SQL>set echo off; //显示start启动的脚本中的每个sql命令,缺省为on
SQL> set echo on //设置运行命令是是否显示语句
SQL> set feedback on; //设置显示“已选择XX行”
SQL>set feedback off; //回显本次sql命令处理的记录条数,缺省为on即去掉最后的 "已经选择10000行"
SQL>set heading off; //输出域标题,缺省为on 设置为off就去掉了select结果的字段名,只显示数据
SQL>set pagesize 0; //输出每页行数,缺省为24,为了避免分页,可设定为0。
SQL>set linesize 80; //输出一行字符个数,缺省为80
SQL>set numwidth 12; //输出number类型域长度,缺省为10
SQL>set termout off; //显示脚本中的命令的执行结果,缺省为on
SQL>set trimout on; //去除标准输出每行的拖尾空格,缺省为off
SQL>set trimspool on; //去除重定向(spool)输出每行的拖尾空格,缺省为off
SQL>set serveroutput on; //设置允许显示输出类似dbms_output
SQL> set timing on; //设置显示“已用时间:XXXX”
SQL> set autotrace on-; //设置允许对执行的sql进行分析
set verify off //可以关闭和打开提示确认信息old 1和new 1的显示.
Oracle 导出数据到文件:
sqlplus /nolog @d:\sp.sql
d:\sp.sql内容如下:
set head off
set headsep off
set newp none
set linesize 100
set pagesize 10000
set sqlblanklines OFF
set trimspool ON
set termout off
set feedback off
spool d:\export.txt
select NODECODE||'&'||NODETYPE||'&'||NODENAME||'&' from "000".tbnode;
spool off
exit
格式化输出 §2.6.1 一般数据的格式化输出 在Oracle的SQL> 下,经常用COLUMN 命令来对所输出的列进行格式化,即按照一定的格式进行显示。COLMUN命令语法如下: COL[UMN] [{ column | expr } [ option_1 ... option_n ] ] column:列名 expr:有效的 SQL 表达式 option_1... option_n:可以是下列之一: ALI[AS] alias CLE[AR] FOLD_A[FTER] FOLD_B[EFORE] FOR[MAT] format HEA[DING] text JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]} LIKE {expr|alias} NEWL[INE] NEW_V[ALUE] variable NOPRI[NT]|PRI[NT] NUL[L] text OLD_V[ALUE] variable ON|OFF WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] 下面给出常用的关键字的解释: Alias 给出列的别名,BREAK和COUMN可以引用所定义的别名。 CLEAR 取消列的定义。 FORMAT 列显示格式,format为: 9999990 9或0的个数决定最多显示多少位 9,999,999.99 按照逗号和小数点来显示数据,若是0以空格显示 099999 显示前面补0 $999,999.99 数字前加美圆号 B99999 若为0 ,则结果为空白 99999Mi 若数字为负,则负号放在数字后(右边),缺省放在左边 99999PR 负号将以括号括起 9.999EEEE 以科学记数法表示(必须有4个E) 999V99 数字乘以 10n ,如 1234变为 123400 DATE 采用日期数字格式(MM/DD/YY) Heading 重新标记列的显示标题,如: SQL> col ename heading 姓名 format a10 SQL> select ename,sal from emp; 例子: SQL COLUMN SALARY FOR $9,999,999.99 COLUMN LAST_NAME FOR A35. §2.6.2 日期的格式化输出 Oracle系统提供了一个 NLS_DATE_FORMAT的环境变量来设置日期的显示格式。用它可以完成按照不同格式要求的显示,比如按照中国的习惯为 yyyy年mm月dd日等。 1.系统日期 sysdate 的显示 用sysdate 可以显示ORACLE RDBMS 所在机器的日期及时间,如: SQL> alter session set nls_date_format ='"公元"yyyy"年"mm"月"dd"日"'; 会话已更改。 SQL> select sysdate from dual; SYSDATE ------------------ 公元2001年05月30日 2.日期类型的显示 select sysdate,to_char(sysdate,’yyyy.mm.dd hh24:mi;ss’) from dual; SQL> connect scott/tiger 已连接。 SQL> alter session set nls_date_format ='yyyy"年"mm"月"dd"日生"'; 会话已更改。 SQL> col HIREDATE heading 生日 SQL> col sal heading 工资 SQL> col sal ename 姓名 SQL> select ename,sal,hiredate from emp; 姓名 工资 生日 ---------- ---------- ----------------- SMITH 800 1980年12月17日生 ALLEN 1600 1981年02月20日生 WARD 1250 1981年02月22日生 JONES 2975 1981年04月02日生 MARTIN 1250 1981年09月28日生 BLAKE 2850 1981年05月01日生 CLARK 2450 1981年06月09日生 SCOTT 3000 1987年04月19日生 KING 5000 1981年11月17日生 TURNER 1500 1981年09月08日生 ADAMS 1100 1987年05月23日生 JAMES 950 1981年12月03日生 FORD 3000 1981年12月03日生 MILLER 1300 1982年01月23日生 已选择14行。 §2.7 加标题 有时在输出一些结果时,可能需要加一些标题,如表上面的顶标题,落款等。这样的要求可由Ttitle和Btitle来完成。 ttitle和btitle ttitle [center|left|right]string 顶标题 btitle [center|left|right]string 底标题 ttitle center 'XX公司人员情况表' btitle left '制表人:xxxx' right '日期:xxxx年xx月' Clear ttitle §2.8 建立简单报告 我们可以用TTITLE、BTITLE、COLUMN、BREAK ON、COMPUTE SUM及SET LINESIZE、SET PAGESIZE、SET NEWPAGE来设置查询结果的显示格式;在用 SPOOL 命令将显示结果输出到一个操作系统文件中去,一般输出文件的类型为.LST。 建立简单报告主要使用下面命令来实现: 1. SPOOL命令 SPOOL filename 将缓冲区的内容写到文件中 SPOOL off 终止写命令 2. COLUMN 命令 column col_name[,heading] format format_spe 把字段的结果指定为一种输出格式 COL name heading '姓名' for a10 COL sal heading '工资' for 9,999.99 3.ttitle、btitle ttitle [center|left|right]string 顶标题 btitle [center|left|right]string 底标题 ttitle center 'XX公司人员情况表' btitle left '制表人:赵元杰' right '日期:1998.11月' Clear ttitle 4.break、compute clear breaks,clear computes break on column 在该列上中断 break on row 在每一行上中断 break on Page break on report skip n 跳过n行 skip page 跳过未用完的页 compute avg compute count compute max compute min compute std compute sum compute var compute num 计算所有行 compute sum of sal on deptno 5.set 在报表中的设置 l set termout off、set termout on 命令 l set termout off 常用SPOOL XXX前,即关闭报表在屏幕上的显示(节省时间) l set termout on 常用SPOOL off之后,即恢复报表在屏幕上的显示 l set ECHO{OFF|ON} 显示执行当中的各命令(即用start 时),set echo 受到 set termout 的影响 l set Lin[esize]{80|integer} 设置行宽度,最大值999 l set pag[esize] {24|integer} 设置页的大小 例子: SQL>COL ename heading ‘姓名’ for a12 SQL>COL sal heading ‘工资’ for a999,999.99 SQL>COL hiredate heading ‘出生’ SQL>SET LINESIZE 200 SQL>SET PAGESIZE 60 SQL>SPOOL c:\all_emp SQL>select ename,sal,deptno,hiredate from emp order by deptno; SQL>SPOOL OFF §2.9 输入变量 Oracle提供一种在处理SQL语句时可以将参数作为变量来对待的技术,即在条件句中可以是变量而不是具体的值,这样的处理就是输入变量。这样做的目的就是可以重复使用同样的语句,每次只要输入相应的值即可。要实现将参数写成为变量,只要在变量前加一个&号即可。看下面语句: Select sid, serial#,username, command from v$session Where USERNAME = upper(‘&usr’); 这样的语句在运行中,系统会自动提示你回答变量的具体值,上面语句运行时提示和回答时显示的信息如下: SQL> Select sid, serial#,username, command from v$session 2 Where USERNAME = upper('&usr'); 输入 usr 的值: sys 原值 2: Where USERNAME = upper('&usr') 新值 2: Where USERNAME = upper('sys') SID SERIAL# USERNAME COMMAND ---------- ---------- ------------------------------ ---------- 7 26 SYS 3 在变量说明中,可以使用多个变量,比如: Alter system kill session ‘&sid,&ser’; 或 Alter system kill session ‘&会话号,&序列号’; 它的运行情况如下: SQL> Select sid, serial#,username, command from v$session; SID SERIAL# USERNAME COMMAND ---------- ---------- ------------------------------ ---------- 1 1 0 2 1 0 3 1 0 4 1 0 5 1 0 6 1 0 7 26 SYS 3 8 16 ZHAO 0 已选择8行。 SQL> Alter system kill session '&sid,&ser'; 输入 sid 的值: 8 输入 ser 的值: 16 原值 1: Alter system kill session '&sid,&ser' 新值 1: Alter system kill session '8,16' 系统已更改。 一般系统缺省下是使用 “&” 符号来定义变量,你也可以使用另外的符号来代替,比如不喜欢用 & 而要用 ?,则有: SQL> set define ? SQL> select sid,serial#,username from v$session where username='?usr'; 输入 usr 的值: SYS 原值 1: select sid,serial#,username from v$session where username='?usr' 新值 1: select sid,serial#,username from v$session where username='SYS' SID SERIAL# USERNAME ---------- ---------- ------------------------------ 7 26 SYS 次时由于我们修改了会话环境的参数值,可以用下面命令查看: SQL> show define