Oracle从入门到精通(第5版)
上QQ阅读APP看书,第一时间看更新

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中不区分大小写。