3.1 SQL*Plus工具
在Oracle 19c数据库系统中,用户对数据库的操作主要是通过SQL*Plus来完成的。SQL*Plus作为Oracle的客户端工具,既可以建立位于数据库服务器上的数据连接,也可以建立位于网络中的数据连接。
3.1.1 启动SQL*Plus
下面介绍如何启动SQL*Plus和如何使用SQL*Plus连接数据库。
(1)选择“开始”/Oracle-OraDb19c_home1/SQLPlus,打开如图3.1所示的SQL*Plus启动界面。
(2)在命令提示符的位置输入登录用户(如system或sys等系统管理账户)和登录密码(密码是在安装或创建数据库时指定的),若输入的用户名和密码正确,则SQL*Plus将连接到数据库,如图3.2所示。
图3.1 SQL*Plus启动界面
图3.2 使用SQL*Plus连接数据库
另外,还可以通过先在“运行”中输入cmd命令来启动命令行窗口,然后在该窗口中输入SQL*Plus命令来连接数据库,如图3.3和图3.4所示。使用SQL*Plus命令连接数据库实例的语法格式如下。
SQLPLUS username[/password][@connect_identifier] [AS SYSOPER|SYSDBA]
username:表示登录用户名。
password:表示登录密码。
@connect_identifier:表示连接的全局数据库名,若连接本机上的默认数据库,则可以省略。
图3.3 使用SQL*Plus命令连接数据库实例
图3.4 通过命令启动的SQL*Plus命令行窗口
说明
在输入Oracle数据库命令时,其关键字不区分大小写(例如,输入sqlplus或SQLPLUS都可以),但参数区分大小写。
3.1.2 使用SQL*Plus连接SCOTT用户
SCOTT用户是Oracle数据库系统中常用的用户,用户名为scott,密码为tiger。SCOTT用户中包含员工信息表emp、部门信息表dept、奖金表bonus和工资等级表salgrade,本书中的大多数实例操作的就是这四张表。
但是在Oracle 19c中并不存在SCOTT用户,所以需要用户自行创建,下面演示如何创建SCOTT用户,并创建SCOTT用户中的数据表。
(1)打开SQL*Plus命令行窗口之后,在“请输入用户名”后输入scott,在“输入口令”后输入tiger,按Enter键之后的结果如图3.5所示。
(2)通过图3.5可知,不能连接SCOTT用户,所以首先应以sysdba的身份连接数据库(用户名为“sqlplus/as sysdba”,输入口令后直接按Enter键,即可连接sys数据库),然后创建scott用户,命令如下。
sqlplus /as sysdba create user scott identified by tiger;
命令执行结果如图3.6所示。
图3.5 不能连接数据库
图3.6 创建scott用户
(3)设置用户使用的表空间,命令如下。
ALTER USER scott DEFAULT TABLESPACE USERS; ALTER USER scott TEMPORARY TABLESPACE TEMP;
命令执行结果如图3.7所示。
(4)为scott用户赋予权限,并使用scott用户登录,命令如下。
GRANT dba TO scott; CONNECT scott/tiger;
命令执行结果如图3.8所示。
图3.7 设置用户使用的表空间
图3.8 为scott赋予权限并登录
(5)输入以下代码,创建部门信息表dept、员工信息表emp、奖金表bonus和工资等级表salgrade,并插入测试数据。
-- 创建数据表 CREATE TABLE dept ( deptno NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, dname VARCHAR2(14) , loc VARCHAR2(13) ) ; CREATE TABLE emp ( empno NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT ); CREATE TABLE bonus ( enamE VARCHAR2(10) , job VARCHAR2(9) , sal NUMBER, comm NUMBER ) ; CREATE TABLE salgrade ( grade NUMBER, losal NUMBER, hisal NUMBER ); -- 插入测试数据 —— dept INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO dept VALUES (20,'RESEARCH','DALLAS'); INSERT INTO dept VALUES (30,'SALES','CHICAGO'); INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON'); -- 插入测试数据 —— emp INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20); INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30); INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30); INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20); INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30); INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30); INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10); INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,to_date('13-07-87','dd-mm-yyyy')-85,3000,NULL,20); INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10); INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30); INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,to_date('13-07-87','dd-mm-yyyy')-51,1100,NULL,20); INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30); INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20); INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10); -- 插入测试数据 —— salgrade INSERT INTO salgrade VALUES (1,700,1200); INSERT INTO salgrade VALUES (2,1201,1400); INSERT INTO salgrade VALUES (3,1401,2000); INSERT INTO salgrade VALUES (4,2001,3000); INSERT INTO salgrade VALUES (5,3001,9999); -- 事务提交 COMMIT;
3.1.3 使用SQL*Plus查询数据库
以上代码执行完毕之后,为了验证是否成功连接上了系统的scott用户,可以通过在SQL *Plus中查询部门表的所有信息(dept表)来进行测试。
【例3.1】查询scott用户的部门表(dept表)的所有信息。(实例位置:资源包\ TM\sl\3\3.1)
使用scott用户连接Oracle后,在提示符“SQL>”后输入如下语句。
select * from dept;
语句执行结果如图3.9所示。
说明
在Oracle中,命令不区分大小写,并且在SQL*Plus编辑器中每条命令都以分号(;)作为结束标志。
编写SQL代码时,标点符号应采用英文形式,不允许出现中文形式。如执行“SELECT * FROM dept;”将会出现如图3.10所示的结果。因为在SQL*Plus编辑器中是以英文形式的分号(;)作为结尾的,相当于结束符。如果输入的是中文形式的分号(;),SQL*Plus编辑器没有遇到结束符,会认为这段SQL代码没有结束,从而让使用者继续输入。
图3.9 通过SQL*Plus查询部门表dept
图3.10 SQL代码中出现中文形式的标点符号
3.1.4 退出SQL*Plus
当不再使用SQL*Plus时,只需要先在提示符“SQL>”后面输入exit或者quit命令,然后按Enter键,即可退出SQL*Plus环境,如图3.11所示。
图3.11 退出SQL*Plus
使用命令退出SQL*Plus为正常退出方式,单击右上角红叉退出是非正常退出。在对数据库进行数据操作后,非正常退出可能会造成数据的丢失。
说明
输入小写或大写的EXIT或QUIT都可退出SQL*Plus会话。SQL*Plus中不区分大小写。