第3章sql语言与sqlplus

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章 SQL语言与SQL*Plus
SQL语言是用来管理和操作数据库的一种声明式语言,类似于英语自然语言,目前已经成为管理数据库的国际标准语言。

SQL语言具有简单易学、操作直观的特点,相较之关系型数据库复杂的理论,它提供了一种清晰明了的操作方式。

SQL*Plus是Oracle提供的一种管理数据库的命令行工具,它可以用来编写SQL、PL/SQL代码,在它上面除了可以执行SQL语言外,还可以操作SQL*Plus特有的一些语言,该工具主要被DBA用来维护数据库。

3.1 SQL语言基础
SQL语言的全称是Structured Query Language,即结构化查询语言,它是Oracle客户端操作数据库的语言,提供了在高层数据结构上执行数据库的操作,不需要了解关系型数据库原理,比如不用指定数据的存放方式和存放格式,而且目前已经被美国国家标准局ANSI和国际标准化组织制定了SQL标准,这也意味着使用相同的SQL语句,可以在不同的数据库系统上执行操作,而且它简单易懂,目前已经成为管理和操作关系型数据库的标准语言。

3.1.1 SQL、SQL*Plus与Oracle的关系
SQL是一门操作数据库的语言,SQL*Plus提供了向服务器端操作SQL语言的工具,而Oracle负责接收到客户端发送过来的工具,在数据库上执行SQL语句,然后发送反馈结果给SQL*Plus客户端。

举个例子,想知道员工史密斯的基本信息,可以打开SQL*Plus,向Oracle服务器发送一条标准的SQL语句,如图3.1所示。

图3.1 在SQL*Plus中查询SQL语句
第1篇 Oracle 基础
·78·
用户首先打开SQL *Plus ,在Windows 平台上,在“运行”菜单中输入cmd 打开命令提示窗口,在该窗口中启动sqlplus.exe 程序,在sqlplus.exe 命令后面添加用户名和密码就可以连接到Oracle 服务器。

连接到之后就会显示SQL>标签,用户就可以在SQL *Plus 的命令提示行下输入SQL 语句。

Oracle 服务器收到这条查询语句后,就会执行数据库的查询工作,这需要一系列的处理步骤,最后将查询结果返回给SQL *Plus ,SQL *Plus 将返回结果呈现给用户。

Oracle 服务器具有SQL 执行引擎和PL/SQL 引擎,当收到客户端传递过来的命令后,通过相应的引擎来解析语句,并转换为相应的数据库操作命令来操作数据库。

这三者之间的区别可以用图3.2来表示。

图3.2 SQL 、SQL *Plus 与Oracle 服务器的关系
3.1.2 SQL 语言的特点
SQL 语言属于第3代程序设计语言,它是一种声明式的极为易用的语言,它是关系型数据库通用的语言,是用于数据库访问的非过程化的、面向集合的语言。

举个例子,想取得某个部门的员工列表,那么可以向数据库服务器发命令,返回emp 表中部门编号为20的员工数据,SQL 语句的写法如下:
SELECT empno 员工编号,ename 员工名称 FROM emp 员工名称 WHERE deptno=20;
要执行这条语句,可以打开命令行窗口,使用sqlplus 命令登录Oracle 数据库,然后在SQL *Plus 命令提示符下发送这条语句,如图3.3所示。

图3.3 在SQL *Plus 中执行获取员工信息的SQL 语句
第3章SQL语言与SQL*Plus
可以看到,SELECT表示要选择数据,FROM表示来源表,WHERE英文单词表示条件,因此这条查询语句很类似于英语中的自然语言,它不像过程式编程,SQL语言是面向集合的,总是在对一个集合进行查询、插入、更新或删除操作。

SQL语言已经成为关系型数据库的标准语言,自从第一个SQL标准在1986年10月由ANSI组织发布以来,经过不断的发展完善,ISO在1992年发布了SQL92标准,接下来的SQL99、SQL 2003等标准不断发布,每一个标准都不断地完善了之前的标准。

注意:虽然ANSI/ISO不断地完善SQL语言,但是由于各大数据库厂商在实现关系型数据库管理系统时的区别,导致了不同的数据库软件厂商的SQL语言在实现上的
区别。

比如Oracle的SQL与SQL Server上的SQL语言有一些区别,不过这种区
别已经日渐减少。

SQL语言的简单易用为各类数据库用户比如应用程序员、数据库管理员、公司经理和最终用户提供了便利,它简化了对数据库的管理,允许用户在逻辑层面上以面向集合的方式操作数据,用户只需要关心数据的最终结果,而不用理解关系型数据库的管理理论,SQL 语言提供了如下功能:
❑查询数据库中的数据。

❑插入、修改和删除表中的数据行。

❑创建、替代、修改和删除数据库中的对象。

❑控制数据库和数据库对象的访问权限。

❑确保数据库安全稳定地运行,保证数据库数据的一致性和完整性。

比如要调整员工史密斯的工资,可以使用一个UPDATE语句向数据库发送一条更新数据的命令,Oracle就会自动地完成所有物理到逻辑上的更改,而用户仅仅需要发布一条类似于英语自然语言的命令,示例语句如下:
SQL> UPDATE emp SET sal=2000 WHERE ename='史密斯';
已更新 1 行。

SQL语言的特性统一可以归纳为如下几点:
❑语言风格统一,可以用一门语言来完成数据库生命周期中的全部活动,比如定义数据库对象、增加、修改、删除数据库、数据库安全性管理等。

❑面向集合的操作方式,SQL语言采用面向集合的操作方式,每一次操作的总是一个集合,这与很多过程化的语言不同。

❑高度非过程化,SQL是声明式的语言,可以使用类似自然语言的语法要求数据库完成工作,用户只需要提出“做什么”,而不需要指明“如何做”,因此无须了
解数据库的存放路径及如何存放等工作。

❑语言简洁,易学易用,关系型数据库本来是一门非常复杂的学科,但是SQL语言简化了用户操作关系型数据库,用户不具有任何编程经验就可以做很多复杂的数
据库操作和管理工作。

SQL语言是Oracle从业人员必须掌握的重点,无论是从事数据库开发还是管理工作,精通SQL的知识能体现出从业者的整体素质,有利于日后的工作成长。

·79·
第1篇 Oracle 基础
·80·
3.1.3 SQL 语言的分类
Oracle 数据库内部,大部分的数据库操作都是通过SQL 语句执行的,比如使用企业管理器时,OEM 会使用很多的SQL 语句来获取数据库的信息,可以通过EM SQL 历史记录看到这些SQL 的执行情况,如图3.4所示。

图3.4 Oracle 企业管理器的SQL 历史记录
一条SQL 语句相当于一条计算机程序或指令,一般必须完整地使用。

在Oracle 数据库中,SQL 语句的作用可以分为如下几大类。

1.数据操作语言语句
查询或操作数据库已有的数据库对象的数据,英文全称是Data Manipulation Language ,简称为DML 语句,它可以从数据库中的表或视图中查询数据,增加、修改、删除或合并数据库的数据,查询SQL 语句的执行计划或对表和视图进行加锁,DML 语句是数据库中使用频率最高的SQL 语句。

举例来说,假定公司要在上海开办一个业务部,可以执行如下的INSERT 插入DML 语句,示例语句如下:
SQL> INSERT INTO dept VALUES(70,'业务部','上海');
已创建 1 行。

2.数据定义语言语句
数据定义语言DDL ,英文全称是Data Definition Language ,作用是定义和修改数据库中的对象,比如可以创建、修改和删除数据库中的表、用户、视图等,修改对象名称、分配和回收权限及角色、打开或关闭审计选项,以及向数据字典中添加注释等。

第3章SQL语言与SQL*Plus
例如下面的语句将在数据库中创建一个新的表,示例语句如下:
SQL> CREATE TABLE new_table(common_name VARCHAR2(20),created_date DATE);
表已创建。

可以使用DROP TABLE语句删除这个表,示例语句如下:
SQL> DROP TABLE new_table;
表已删除。

3.事务控制语句
管理DML语句对数据库的修改,用来将数据的修改永久地保存或恢复到修改前的时间点,提交事务语句COMMIT将提交对数据库的修改,ROLLBACK语句用来回滚事务的修改,可以使用保存点SAVEPOINT回滚到特定的位置,可以使用SET TRANSACTION 修改事务的属性。

例如向数据库发送COMMIT语句,Oracle会完成整个事务,示例语句如下:
SQL> COMMIT;
提交完成。

4.会话控制语句
用来管理用户会话的属性,当用户登录Oracle数据库后,就开启了一个会话。

可以使用ALTER SESSION会话控制语句来控制这个会话可以执行的特定操作,比如可以使用下面的会话控制语句示例来设置系统的日期时间格式:
SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
会话已更改。

5.系统控制语句
主要用于修改Oracle数据库的实例属性,ALTER SYSTEM是Oracle中唯一的系统控制语句,可以修改实例的设置,比如可以修改共享服务器进程的最小数据、可以终止进程或设置归档日志模式等。

3.1.4 SQL语言的编写规则
SQL与Oracle的PL/SQL都具有不区分大小写的特性,如果不怎么注意区分大小写,写出来的代码会变得较混乱,不够清晰易读,为了提高程序的可读性和性能,Oracle建议用户按照以下大小写规则编写代码:
❑PL/SQL保留字使用大写字母,例如BEGIN、DECLARE、LOOP、ELSIF等。

❑内置函数使用大写字母,例如SUBSTR、COUNT、TO_CHAR等。

❑预定义类型使用大写字母,例如NUMBER、VARCHAR2、BOOLEAN、DATE等。

❑SQL关键字使用大写字母,例如SELECT、INTO、UPDATE、WHERE等。

❑数据库对象使用小写字母,例如数据库表名、列名、视图名等。

Oracle在执行SQL语句时,首先会对SQL语句进行解析,将解析后的SQL语句放在
·81·
第1篇 Oracle 基础
·82·
位于系统全局区SGA 中的共享池中,这块内存区域可以被所有的数据库用户共享。

当执行一个SQL 语句时,比如在PL/SQL 语句中的游标执行SQL 语句时,如果Oracle 检测到它和以前已运行过的语句相同,就会使用已经解析过的最优的执行路径。

注意:Oracle 在执行一条SQL 语句时,总是会先从共享内存区中查找相同的SQL 语句,
但是由于Oracle 只对简单表进行缓存,对于多表连接查询并不适用。

在从共享池中匹配SQL 语句时,Oracle 会进行字符级的比较,因此如下的查询都不会
进行共享,因为这几个查询使用了不同的大小写,即便都是查询emp 表,示例语句如下: SELECT * FROM EMP;
SELECT * from EMP;
Select * From Emp;
SELECT * FROM EMP;
为了避免这类SQL 语句写法上的混乱造成的性能损失,在编写SQL 语句时,必须注意采用大小写一致约定,关键字、保留字大写;用户声明的标识符小写。

通过设计本公司的代码规则并遵守这些规则,使要处理的语句与共享池中的相一致,能提升整个SQL 语句的执行性能。

非常轻松地让代码变得比较美观,在Toad 中,通过使用工具栏中的“Format Code ”工具按钮(或按Ctrl+Shift+E 快捷键)可以格式化PL/SQL 代码,如图3.5所示。

图3.5 Toad 代码格式化工具
Toad 在格式化完代码后,会添加一个格式化日期的注释及格式化器的版本信息。

PL/SQL Developer
也提供了相似的代码美化工具来美化代码。

可以通过工具栏的“PL/SQL 美化器”来格式化PL/SQL 代码,如图3.6所示。

有了这些代码编辑器工具的辅助,可以大大提高程序开发人员的工作效率,提升代码的质量,使得代码变得更加清晰可读,降低程序代码的维护成本。

代码格式化按钮
第3章 SQL 语言与SQL*Plus
·83·
图3.6 使用PL/SQL 的美化工具格式化代码
3.2 认识SQL *Plus
连接和使用Oracle 有众多的工具,比如图形化的Oracle SQL Developer 及基于Web 的企业管理器等等,但是对于数据库管理员DBA 来说,大多数时间都在使用SQL *Plus 来连接和使用数据库,对于任何新入手Oracle 数据库的用户来说,掌握一些SQL *Plus 的基础知识很有必要,因为它提供了一个轻量级的代码操作环境来管理数据库,它提供的命令反馈提示对于初学Oracle 的用户来非常重要。

3.2.1 SQL *Plus 的功能
SQL *Plus 是一个命令行式的交互式数据库管理工具,它随Oracle 数据库一同安装,客户端的计算机在安装Oracle 客户端时也会安装这个客户端的管理工具,它可以同时存在于客户端和服务器端。

对于即时客户端的用户,Oracle 也提供了一个即时客户端版的SQL *Plus 工具,它是一个独立的可执行程序,使用OCI 即时客户端来访问数据库。

SQL *Plus 有自己的命令提示环境,在这个提示环境中可以执行SQL 、PL/SQL 及SQL *Plus 特有命令和操作系统命令,它具有如下的几个功能:
❑ 格式化、计算、存储和打印查询的结果。

❑ 支持表和对象的结构的显示。

❑ 可以开发和运行SQL 、PL/SQL 脚本。

❑ 可以实现数据库管理任务。

一般来说,使用SQL *Plus 主要用来完成如图3.7所示的工作。

SQL *Plus 通常位于$ORACLE_HOME\bin 文件夹下,其中ORACLE_HOME 是环境变量定义,如果在环境变量中定义了这个文件夹,可以直接在命令行工具下输入sqlplus 命令,它将启动SQL *Plus 这个命令行工具,此时SQL *Plus 会首先要求登录数据库,如图3.8 所示。

PL/SQL 美化器
第1篇 Oracle基础
·84·
图3.7 SQL*Plus的功能示意图
图3.8 启动SQL*Plus命令行工具
如果是使用远程终端工具连接到目标服务器,比如使用SecureCRT连接到Linux或UNIX环境,则可以在Oracle安装环境下面直接使用sqlplus命令来启动SQL*Plus,这些终端环境提供了与命令提示符环境相似的操作方式。

3.2.2 启动SQL *Plus
在启动SQL*Plus之前,确保设置了ORACLE_SID、ORACLE_HOME和LD_LIBBARY_PATH环境变量,在Windows平台下一般不用怎么设置,而Linux或UNIX 环境如果没有正确设置,有可能导致SQL*Plus的启动出现错误。

启动并登录的语句如下:
C:\>sqlplus scott/tigers
SQL*Plus: Release 11.2.0.1.0 Production on 星期日 4月 28 22:16:21 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 这种方式将用户名和密码以/线分隔,不过很多用户不希望将密码以明文的方式显示在
第3章 SQL 语言与SQL*Plus
·85·
界面上,可以仅输入一个用户名,这样SQL *Plus 会聪明地提示用户输入密码: C:\>sqlplus scott
SQL *Plus: Release 11.2.0.1.0 Production on 星期日 4月 28 22:17:55 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved.
输入口令:
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
由于这里并没有指定要连接的数据库,SQL *Plus 将使用环境变量ORACLE_SID 指定的数据库,如果要连接到其他的数据库,示例语句如下: sqlplus username@connect_identifier
或者加上密码的语法:
sqlplus username/password@connect_identifier
字符@后面是连接标识符,这是一个在tnsnames.ora 文件中定义的连接标识,可以使用客户端的Oracle 网络管理器工具来创建新的连接标识,或者直接打开$ORACLE_HOME\NETWORK\ADMIN 文件夹下的tnsnames.ora 来编辑这个文件。

例如连接标识符sales1的配置如下: SALES1 =
(DESCRIPTION =
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521) )
(CONNECT_DATA= (SERVICE_NAME=) ) )
其中DESCRIPTION 指定连接描述,PROTOCOL 指定TCP 访问方式,HOST 指定一个IP 地址或主机名称,PORT 指定端口号,SERVICE_NAME 指定全局服务名称。

要连接到ORCL 数据库,完整的语法如下:
C:\>sqlplus scott/tigers@ORCL SQL *Plus: Release 11.2.0.1.0 Production on 星期日 4月 28 22:29:44 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
一些操作必须要具有SYSDBA 或SYSOPER 权限的用户才能正常操作,比如启动或关机,那么要用这样的身份登录数据库,必须要使用AS SYSDBA 来进行登录,示例语句 如下: C:\>sqlplus sys/oracle@ORCL AS SYSDBA
SQL *Plus: Release 11.2.0.1.0 Production on 星期日 4月 28 22:31:32 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
可以使用SQL *Plus 的SHOW USER 命令查看当前登录的是哪个用户,示例语句如下: SQL> SHOW USER
USER 为 "SYS"
第1篇 Oracle基础
如果在数据库中创建了操作系统认证的用户账户,可以直接在SQL*Plus中使用反斜线进行连接,如下:
C:\>sqlplus /
或者使用AS SYSDBA指定用操作系统认证的方式以DBA身份进行登录,示例语句如下:
C:\>sqlplus / AS SYSDBA
SQL*Plus: Release 11.2.0.1.0 Production on 星期日 4月 28 22:34:18 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> SHOW USER
USER 为 "SYS"
3.2.3 重新连接数据库
当在命令行提示窗口中出现了SQL>提示符后,表示已经连接到了一个Oracle数据库实例。

在实际的工作中经常需要在不同的用户和不同的数据库之间进行切换,此时可以使用CONNECT命令,在SQL*Plus中可以仅输入命令的前4个字符,SQL*Plus会自动完成命令的匹配。

CONNECT命令允许在不退出SQL*Plus命令提示环境的情况下以不同的身份或者是连接到不同的数据库,示例语句如下:
SQL> conn scott/tigers
已连接。

SQL> show user
USER 为 "SCOTT"
SQL> conn sys/oracle as sysdba
已连接。

SQL> show user
USER 为 "SYS"
在这个示例中首先使用CONNECT命令用scott用户登录,稍后又改为使用SYS数据库管理员身份进入数据库。

SHOW USER命令显示了当前连接的用户的名称,CONNECT 命令还可以连接到其他的数据库,在进行数据库切换时比较常用,示例语句如下:SQL> conn scott/tigers@ORCL
已连接。

在这个命令中使用连接标识符指定了要连接到的目标数据库的连接符,这样就切换到了一个不同的数据库中。

3.2.4 SQL*Plus运行环境设置
SQL*Plus本身是可配置的,它提供了很多的配置命令,比如用来控制输出的行数或列数,比如要在每个命令提示符前面显示一个时间,可以使用SET TIME ON/OFF来实现,示例语句如下:
·86·
SQL> SET TIME ON
22:50:20 SQL> SELECT COUNT(1) FROM emp;
COUNT(1)
----------------
18
22:50:28 SQL> SET TIME OFF
SQL>
现在SQL命令提示符前面具有了一个时间显示,如果希望统计每个SQL命令的运行时间,可以使用SET TIMING ON/OFF命令,示例语句如下:
SQL> SET TIMING ON
SQL> SELECT COUNT(1) FROM emp;
COUNT(1)
-----------------------
18
已用时间: 00: 00: 00.00
SQL> SET TIMING OFF;
可以看到,现在每个SQL语句执行之后,会显示一个已用时间项。

SQL*Plus提供了很多这样的运行环境的设置命令,这些命令在格式输出、自动计算、显示统计信息等时非常常用,在本书后面的内容中会引入很多环境设置命令,表3.1是部分环境设置命令的描述和基本的语法。

表3.1 SQL*Plus环境变量列表
选 项 说 明
SET ARRAYSIZE {15|N} 设置SQL*PLUS一次从数据库中取出的行数,其取值范围为任意正整数
SET
AUTOCOMMIT{ON|OFF|IMMEDIATE| N} 该参数的值决定Oracle何时提交对数据库所做的修改。

当设置为ON和IMMEDIATE时,SQL命令执行完毕后,立即提交用户做的更改;而当设置为OFF时,则用户必须使用COMMIT命令提交。

关于事务处理的请参考第18章
SET AUTOPRINT{ON|OFF} 自动打印变量值,如果AUTOPRINT设置为ON,则在过程的执行过程中可以看到屏幕上打印的变量值;设置为OFF时表示只显示“过程执行完毕”这样的提示
SET AUTORECOVERY{ON|OFF} 设定为ON时,将以默认的文件名来记录重做记录,当需要恢复时,可以使用RECOVER AUTOMATIC DATABASE语句恢复,否则只能使用RECOVER DATABASE语句恢复
SET AUTOTRACE{ON|OFF|TRACE
[ONLY]}[EXPLAIN][STATISTICS]
对正常执行完毕的SQL DML语句自动生成报表信息SET BLOCKTERMINATOR {C|
ON|OFF}
定义表示结束PL/SQL块结束的字符
SET CMDSEP{;|C|ON|OFF} 定义SQL*PLUS的命令行区分字符,默认值为OFF,也就是说回车键表示下一条命令并开始执行;假如设置为ON,则命令行区分字符会被自动设定成“;”,这样就可以在一行内用“;”分隔多条SQL命令
SET COLSEP{ _|TEXT} 设置列和列之间的分隔字符。

默认情况下,在执行SELECT 输出的结果中,列和列之间是以空格分隔的。

这个分隔符可以通过使用SET COLSEP命令来定义
SET LINESIZE {80|N} 设置SQL*PLUS在一行中能够显示的总字符数,默认值为80。

可以的取值为任意正整数
SET LONG {80|N} 为LONG型数值设置最大显示宽度,默认值为80
·87·
续表选 项 说 明
SET NEWPAGE {1|N|NONE} 设置每页打印标题前的空行数,默认值为1
SET NULL TEXT 设置当SELECT语句返回NULL值时显示的字符串
SET NUMFORMAT FORMAT 设置数字的默认显示格式
SET PAGESIZE {14|N} 设置每页打印的行数,该值包括NEWPAGE设置的空行数
SET PAUSE{OFF|ON|TEXT} 设置SQL*PLUS输出结果时是否滚动显示。

当取值为NO时表示输出结果的每一页都暂停,用户按下回车键后继续显示;取值为字符串时,每次暂停都将显示该字符串
SET RECSEP {WRAPPED | EACH | OFF} 显示或打印记录分隔符。

其取值为WRAPPED时,只在折叠的行后面打印记录分隔符;取值为EACH则表示每行之后都打印记录分隔符;OFF表示不必打印分隔符
SET SPACE{1 | N} 设置输出结果中列与列之间的空格数,默认值为10
SET SQLCASE{MIXED | LOWER | UPPER} 设置在执行SQL命令之前是否转换大小。

取值可以为MIXED
(不进行转换)、LOWER(转换为小写)和UPPER(转换为
大写)
SET SQLCONTINUE{>| TEST} 设置SQL*PLUS的命令提示符
SET TIME {OFF | ON} 控制当前时间的显示。

取值为ON时,表示在每个命令提示符前显示当前系统时间;取值为OFF则不显示系统当前时间
SET TIMING {OFF | ON} 控制是否统计每个SQL命令的运行时间。

取值为ON表示统计,OFF则不统计
SET UNDERLINE{-| C | ON | OFF} 设置SQL*PLUS是否在列标题下面添加分隔线,取值为ON 或OFF时分别表示打开或关闭该功能;还可以设置列标题下面分隔符的样式
SET WRAP {ON | OFF} 设置当一个数据项比当前行宽长时,SQL*PLUS是否截断数据项的显示。

取值为OFF时表示截断,ON表示超出部分折叠到下一行显示
对于SQL*Plus的使用人员来说,每次进入SQL*Plus都要设置环境是一件令人非常困扰的事情,还好可以将这些环境设置命令编写为一个名为
login.sql的脚本,再设置一个名为SQLPATH的环境变量,
指向这个login.sql脚本,这样就可以在每次SQL*Plus启
动时自动进行环境变量的设置。

举例来说,笔者创建了环境设置脚本放在
E:\app\login.sql文件中,接下来打开Windows的环境变量
设置窗口,可以右击桌面上的“我的电脑”图标,从弹出
的菜单中选择“属性”,在属性窗口中选择“高级|环境
变量”,在用户变量中添加一个SQLPATH的环境变量设
置,指向E:\login.sql,如图3.9所示。

这样在下次重新启动SQL*Plus时,就会执行这个脚
本,然后就可以在每次启动SQL*Plus时自动执行这个包
含了环境设置的脚本,而不用每次都手动进行设置。

3.2.5 使用命令帮助
SQL*Plus本身提供了很多命令,这类命令供SQL*Plus使用,来设置环境或简化对
图3.9 设置环境变量
·88·
Oracle数据库服务器的访问,为了加快用户使用SQL*Plus,笔者建议在使用之前学会先使用帮助工具查看命令的解释,SQL*Plus内建了帮助程序,可以随时通过HELP命令查询相关的命令信息,比如要查看DESC这个命令的用法,示例语句如下:
scott_Ding@ORCL> HELP DESC
DESCRIBE
--------------------------------------------------------------------- Lists the column definitions for a table, view, or synonym,
or the specifications for a function or procedure.
DESC[RIBE] {[schema.]object[@connect_identifier]}
可以看到,HELP命令不仅显示出了命令的描述信息,而且提供了命令的详细使用语法,这样就可以根据语法的描述来使用这个命令。

如果仅仅是输入HELP命令而不添加任何其他要获取帮助的命令,SQL*Plus将显示可以参考的SQL*Plus的参考资料,示例语句如下:
scott_Ding@ORCL> HELP
HELP
-------------------------------------------------------------------- Accesses this command line help system. Enter HELP INDEX or ? INDEX
for a list of topics.
You can view SQL*Plus resources at
/technology/tech/sql_plus/
and the Oracle Database Library at
/technology/documentation/
HELP|? [topic]
可以看到,HELP命令除提供了SQL*Plus的资源链接外,还提示用户可以使用HELP INDEX或?INDEX显示命令的列表,因此如果想要快速了解SQL*Plus的命令列表,可以使用HELP INDEX命令,示例语句如下:
scott_Ding@ORCL> HELP INDEX
Enter Help [topic] for help.
@ COPY PAUSE SHUTDOWN
@@ DEFINE PRINT SPOOL
/ DEL PROMPT SQLPLUS
ACCEPT DESCRIBE QUIT S TART
APPEND DISCONNECT RECOVER STARTUP
ARCHIVE LOG EDIT REMARK STORE
ATTRIBUTE EXECUTE REPFOOTER TIMING
BREAK EXIT REPHEADER TTITLE
BTITLE GET RESERVED WORDS (SQL) UNDEFINE
CHANGE HELP RESERVED WORDS (PL/SQL) VARIABLE
CLEAR HOST RUN WHENEVER OSERROR
COLUMN INPUT SAVE WHENEVER SQLERROR
COMPUTE LIST SET XQUERY
CONNECT PASSWORD SHOW
有了这个命令列表,就可以继续使用HELP+命令的方式查看更加详细的帮助,比如可以使用EHLP @查看@这个命令的作用,示例语句如下:
scott_Ding@ORCL> HELP @
@ ("at" sign)
--------------------------------------------------------------------- Runs the SQL*Plus statements in the specified script. The script can be called from the local file system or a web server.
·89·
@ {url|file_name[.ext]} [arg ...]
……
了解到@的作用和语法格式后,就可以使用它来执行一个外部脚本了。

可见灵活地使用帮助不仅可以学到命令的语法,时时应用HELP还能够加速记忆,在日常工作中十分便利。

3.3 操作数据库
SQL*Plus主要用来与Oracle数据库交互,一般来说在SQL*Plus中可以使用两种类型的命令,分别是:
❑本地命令,控制SQL*Plus本身操作的命令,比如COPY、COMPUTE、REM和SET LINESIZE等,这些命令用来在SQL*Plus本地操作,并不会发送到服务器端。

❑服务器执行的命令,这些命令通常是Oracle的SQL命令或PL/SQL代码,发送到服务器端,SQL命令以分号(;)结尾,PL/SQL命令用正斜线(/)结束。

本节将主要讨论如何在SQL*Plus中执行服务器端的SQL或PL/SQL代码,同时也会讨论SQL*Plus常用的一些本地命令。

3.3.1 执行SQL与PL/SQL代码
在SQL*Plus中输入SQL语句时,是以分号作为结束符的,当提交了一条SQL语句后,SQL*Plus会将用户输入的语句发送到服务器中,同时将这条语句存放到SQL缓冲区中。

例如下面在SQL*Plus中输入一条SELECT查询语句,用来查询emp表中的员工信息,示例语句如下:
scott_Ding@ORCL> SELECT empno,ename FROM emp WHERE deptno=20;
EMPNO ENAME
--------- ------
7369 史密斯
7566 约翰
7788 斯科特
7876 亚当斯
7902 福特
7892 张八
7893 霍九
7894 霍十
已选择8行。

可以看到,只要在SQL语句的结尾处输入分号,按Enter键后,SQL*Plus将这条SQL 语句发送给服务器,数据库服务器返回执行的结果集,这条SQL语句会被存放到SQL*Plus 的缓冲区中。

只要没有输入分号结束符,可以任意按下Enter键,SQL*Plus会记住用户的输入,因此可以在输入时使用一定的SQL语句的格式,示例语句如下:
scott_Ding@ORCL> SELECT empno,ename
·90·。

相关文档
最新文档