替代变量:
在select后
select &col1 from emp;
Enter value for col1: ename old 1: select &col1 from emp new 1: select ename from emp ENAME ---------- SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER 14 rows selected. Elapsed: 00:00:00.02
在from后
select * from &tab;
Enter value for tab: emp old 1: select * from &tab new 1: select * from emp EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected. Elapsed: 00:00:00.01
在where后
select * from emp where &con;
Enter value for con: ename like 'S%' old 1: select * from emp where &con new 1: select * from emp where ename like 'S%' EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 Elapsed: 00:00:00.00
在order by 后
select * from emp order by &col;
Enter value for col: ename old 1: select * from emp order by &col new 1: select * from emp order by ename EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7934 MILLER CLERK 7782 23-JAN-82 1300 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7369 SMITH CLERK 7902 17-DEC-80 800 20 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 14 rows selected. Elapsed: 00:00:00.01
&&符号替代变量,隐含会设置环境变量,第一次会询问变量值,第二次在环境变量里面找,如果找到了就不会再次输入,直接用环境变量里面的值
第一次执行
select * from &&tab;
Enter value for tab: emp old 1: select * from &&tab new 1: select * from emp EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected. Elapsed: 00:00:00.00
第二次输入
select * from &&tab;
old 1: select * from &&tab new 1: select * from emp EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected. Elapsed: 00:00:00.00
第二次输入就不会让用户再次输入&&tab的值,而是直接显示查询结果
查看环境变量
define
DEFINE _DATE = "26-APR-18" (CHAR) DEFINE _CONNECT_IDENTIFIER = "sundb" (CHAR) DEFINE _USER = "ORACLE" (CHAR) DEFINE _PRIVILEGE = "" (CHAR) DEFINE _SQLPLUS_RELEASE = "1102000100" (CHAR) DEFINE _EDITOR = "vim" (CHAR) DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1102000100" (CHAR) DEFINE TAB1 = "emp" (CHAR) DEFINE TAB = "emp" (CHAR)
发现环境变量中存在tab的值,如果要取消这个环境变量,下次让用户再次输入时可以用undefine命令
undefine tab
ORACLE@ sundb>define DEFINE _DATE = "26-APR-18" (CHAR) DEFINE _CONNECT_IDENTIFIER = "sundb" (CHAR) DEFINE _USER = "ORACLE" (CHAR) DEFINE _PRIVILEGE = "" (CHAR) DEFINE _SQLPLUS_RELEASE = "1102000100" (CHAR) DEFINE _EDITOR = "vim" (CHAR) DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1102000100" (CHAR) DEFINE TAB1 = "emp" (CHAR)
当然也可以直接用define命令定义环境变量
SQLPLUS环境命令
select * from &tab;
Enter value for tab: emp old 1: select * from &tab new 1: select * from emp EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected. Elapsed: 00:00:00.00
我们会发现这里会显示新旧值得对比,这个就是SQLPLUS环境变量控制的
show verify
verify ON
可以用set命令修改环境变量
set verify off
select * from &tab;
Enter value for tab: emp EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected. Elapsed: 00:00:00.00
linesize每行的显示长度
show linesize
linesize 120
pagesize每页显示多少行,这里需要注意的是每页包括列头的两行和页尾的空行,所以显示的行数会比设置的少3行
show pagesize
pagesize 200
timing在查询的结果集后显示每次查询消耗的时间
show timing
timing ON
sqlprompt设置SQLPLUS的提示符
show sqlprompt
sqlprompt "_user@ _connect_identifier>"
arraysize查询结果集的预取结果条数
show arraysize
arraysize 15
feedback在结果集后打印一共查询到数据的行数
show feedback
FEEDBACK ON for 6 or more rows
heading在打印结果集时是否显示表头
show heading
heading ON
long显示long类型或者lob类型的显示长度,默认sqlplus字符只显示84个,超出的字符会被截断
show long
long 50000
column可以格式化一列的显示长度,数字格式用9做占位符,默认留出一位做负号和小数点显示位,column也可以修改列名
col ename for a10
col sal for 999999
col ename heading 'e_|name'
select * from emp;
e_ EMPNO name JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected. Elapsed: 00:00:00.00
这里 | 起到了列头换行的作用
同样可以用column ename来查看格式化的内容
column ename
COLUMN ename ON HEADING 'e_|name' headsep '|' FORMAT a10
可以用column ename clear取消之前的格式化内容
column ename clear
column sal justify left确定列头的对齐方式
column sal justify left format L999,999.99
select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- --------------------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 $800.00 20 7499 ALLEN SALESMAN 7698 20-FEB-81 $1,600.00 300 30 7521 WARD SALESMAN 7698 22-FEB-81 $1,250.00 500 30 7566 JONES MANAGER 7839 02-APR-81 $2,975.00 20 7654 MARTIN SALESMAN 7698 28-SEP-81 $1,250.00 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 $2,850.00 30 7782 CLARK MANAGER 7839 09-JUN-81 $2,450.00 10 7788 SCOTT ANALYST 7566 19-APR-87 $3,000.00 20 7839 KING PRESIDENT 17-NOV-81 $5,000.00 10 7844 TURNER SALESMAN 7698 08-SEP-81 $1,500.00 0 30 7876 ADAMS CLERK 7788 23-MAY-87 $1,100.00 20 7900 JAMES CLERK 7698 03-DEC-81 $950.00 30 7902 FORD ANALYST 7566 03-DEC-81 $3,000.00 20 7934 MILLER CLERK 7782 23-JAN-82 $1,300.00 10 14 rows selected. Elapsed: 00:00:00.00
column comm null 0
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 0 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 0 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 0 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 0 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 0 20 7839 KING PRESIDENT no manager 17-NOV-81 5000 0 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 0 20 7900 JAMES CLERK 7698 03-DEC-81 950 0 30 7902 FORD ANALYST 7566 03-DEC-81 3000 0 20 7934 MILLER CLERK 7782 23-JAN-82 1300 0 10 14 rows selected. Elapsed: 00:00:00.00
break on设置重复值列的连续显示
break on mgr
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT no manager 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected. Elapsed: 00:00:00.00
所有mgr相同的行mgr只显示一次
取消可以用
clear break
breaks cleared
run(/)运行缓冲区里面的最后一条sql语句
list 查看缓冲区里面的sql语句
append 在缓冲区sql后添加字符
save保存缓冲区里面的sql
save 1.sql
Created file 1.sql
get 查看文件内容
@执行sql脚本,@1和@1.sql是一样的
spool可以将屏幕上显示的信息保存到文件里,用spool off命令结束,后面可以跟append或者replace追加或者替换之前的文件内容
spool 1.txt
select *from emp where rownum=1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 Elapsed: 00:00:00.00
spool off
set trimspool on 去掉每行末尾的空格
host(!)执行主机命令
edit 用vi编辑缓冲区中的sql
tti ‘XXX’设置页眉
bti‘XXX’设置页脚