Oracle-04-SQL工具-sqlplus环境变量与命令

替代变量:

在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’设置页脚




猜你喜欢

转载自blog.csdn.net/paul_george/article/details/80084696