一、SQL Plus与数据库的交互
可以 使用2种基本类型的命令与数据库进行交互:
服务器执行的命令:SQLQ命令(以;结束)和PL/SQL程序块(以/结束)
本地命令:SQL Plus命令
二、设置SQL Plus的运行环境
1.使用SET命令,可以设置图中项
2.语法
SET system_variable value
3.常用设置项
①SET PAGSIZE value设置从顶部标题至页结束之间的行数
②SET LINESIZE value设置一行所显示的最多字符数
③SET NEWPAGE value设置页与页的间隔,默认为一行
④SET PAUSE value设置结果是否滚动显示,value可取范围有ON/OFF/TEXT
=>注意,在sql plus客户端输入set命令做的设置是临时生效的,也就是说,你关掉sqlplus再打开,就又恢复到初始值了,要永久生效的话怎么操作呢
可以编辑D:\oracle\sqlplus\admin\glogin.sql文件,将SET命令写在里面,重启生效
三、SQL Plus管理命令
1.HELP命令
帮助,提示。
语法为HELP|?[topic],如HELP SHOW 等效于?SHOW
2.DESCRIBE
描述表、视图、索引等结构(字段名、是否为空、类型)
两种语法①为 desc objectname,如desc emp,需要单独执行该命令
SQL> desc emp
名称 是否为空? 类型
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- --------------------------------------------------------------------------------------------------------------------
EMPNO
NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
②#desc objectname,适用于什么场景呢=>比如sql写一半,忘记字段名了,使用该命令可以查询 且不影响当前在编写的sql
SQL> select empno
2 #desc emp
名称 是否为空? 类型
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- --------------------------------------------------------------------------------------------------------------------
EMPNO
NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
2 ,ename from emp;
EMPNO ENAME
---------- --------------------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
已选择 10 行。
3.SPOOL命令
将输出的结果写入到某个文件种
语法为 SPOOL [filename[CREATE|REPLACE|APPEND|OFF|OUT]] 创建|替换|引用|关闭输出|打印
SPOOL OFF和SPOOL OUT的区别:
OFF是关闭输出
OUT=OFF+PRINT
SQL> SPOOL E:\我的01文档\emp.txt
SQL> select empno,ename,sal,job from emp where job='SALESMAN';
EMPNO ENAME SAL JOB
---------- -------------------- ---------- ------------------
7499 ALLEN 1600 SALESMAN
7521 WARD 1250 SALESMAN
7654 MARTIN 1250 SALESMAN
7844 TURNER 1500 SALESMAN
SQL> spool off
--注意要关闭spool才能在txt里看到输出的内容
四、常用SQL Plus命令
1.编辑EDIT
ED filename[.ext]
SQL> ed E:\我的01文档\emp.txt
2.保存SAVE/EDIT
①SAVE用于将sql缓冲区最近一条sql保存到某个文件种
语法为SAVE file_name
SQL> select * from dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
20 RESEARCH DALLAS
30 SALES CHICAGO
SQL> save E:\我的01文档\dept
已创建 file E:\我的01文档\dept.sql
SQL> clear buffer
buffer 已清除
SQL> save E:\我的01文档\dept
SP2-0107: 无须保存。
SQL>
3.运行命令
①命令行方式:sql命令后面加;
②SQL缓冲区方式
run或/
SQL> run
1* select * from dept
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
20 RESEARCH DALLAS
30 SALES CHICAGO
SQL> /
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
20 RESEARCH DALLAS
30 SALES CHICAGO
SQL>
③命令文件方式
------start命令 只能在sqlplus中运行
start{url|file_name}
------@命令既能在sqlplus中运行又能在命令行中运行
SQL> start E:\我的01文档\dept.sql
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
20 RESEARCH DALLAS
30 SALES CHICAGO
SQL> @ E:\我的01文档\dept.sql
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
20 RESEARCH DALLAS
30 SALES CHICAGO
@命令在命令行中运行示例如下
五、格式化SQL Plus输出
1.格式化列
语法 COL[UMN] [COLNAME][OPTION]
1.1修改列标题
SQL> col empno heading 员工编号
SQL>col ename heading 员工名称
SQL> select empno,ename from emp;
员工编号 员工名称
---------- --------------------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
已选择 10 行。
1.2 格式化数字列
语法 COL[UMN] colum_name Format model
SQL> col sal format $999,999.00
SQL> select sal from emp;
SAL
------------
$800.00
$1,600.00
$1,250.00
$2,975.00
$1,250.00
$2,850.00
$2,450.00
$3,000.00
$5,000.00
$1,500.00
已选择 10 行。
1.3格式化字符长度
如例子中,将ename字段长度格式化为3,超出就换行显示了
SQL> col ename format a3
SQL> seelct * from emp;
SP2-0734: 未知的命令开头 "seelct * f..." - 忽略了剩余的行。
SQL> select * from emp;
员工编号 员 JOB MGR HIREDATE SAL COMM DEPTNO
---------- --- ------------------ ---------- -------------- ------------ ---------- ----------
7369 SMI CLERK 7902 17-12月-80 $800.00 20
TH
7499 ALL SALESMAN 7698 20-2月 -81 $1,600.00 300 30
EN
1.4格式化NULL值
COL col_name null text
SQL> col comm null null
SQL> select * from emp;
员工编号 员 JOB MGR HIREDATE SAL COMM DEPTNO
---------- --- ------------------ ---------- -------------- ------------ ---------- ----------
7369 SMI CLERK 7902 17-12月-80 $800.00 null 20
TH
7499 ALL SALESMAN 7698 20-2月 -81 $1,600.00 300 30
EN
7521 WAR SALESMAN 7698 22-2月 -81 $1,250.00 500 30
D
1.5 控制格式化开关
COL col_name on/off
1.6 列出和重新设置列显示属性
①列出
COL col_name
SQL> col comm
COLUMN comm ON
NULL 'null'
②重设
COL col_name clear
SQL> col comm
COLUMN comm ON
NULL 'null'
SQL> col comm clear
SQL> col comm
SP2-0046: COLUMN 'comm' 未定义
2.定义页与报告的标题
2.1 定义页标题
TTI [ printspec[text|variable]...] [OFF|ON]
>>输出工资表所有数据,并设置头/底标题
SQL> ttit left ' 工资登记表'
SQL> btit left '打印时间:2025.03.10 by addie'
SQL> SET pagesize 10
SQL> select * from salgrade;
工资登记表
GRADE LOSAL HISAL
---------- ---------- ----------
2 1201 1400
3 1401 2000
4 2001 3000
打印时间:2025.03.10 by addie
2.2 定义报告(底)的标题
BTI [ printspec[text|variable]...] [OFF|ON]
效果见2.1
在退出sqlplus前,该设置对所有查询生效,注意手动关闭
ttitle off
btitle off
SQL> select * from salgrade;
工资登记表
GRADE LOSAL HISAL
---------- ---------- ----------
2 1201 1400
3 1401 2000
4 2001 3000
打印时间:2025.03.10 by addie
SQL> btitle off
SQL> select * from salgrade;
工资登记表
GRADE LOSAL HISAL
---------- ---------- ----------
2 1201 1400
3 1401 2000
4 2001 3000
SQL> ttitle off
SQL> select * from salgrade;
GRADE LOSAL HISAL
---------- ---------- ----------
2 1201 1400
3 1401 2000
4 2001 3000
That's all~
Have a nice study~