> sqlplus 账号/密码@数据库
# 示例
> sqlplus scott/tiger@orcl
> sqlplus /nolog -- 无日志登录:避免别人从日志中查询到登录信息
> conn soctt/soctt@orcl
# 示例
> sqlplus /nolog
> conn scott/tiger@orcl
> sqlplus '/ AS SYSDBA'
# 退出
exit或者是quit
使用SQL*Plus
可以方便地编辑和管理编程的过程,其中包括编辑命令、保存命令、加入注释、运行命令、编写交
互命令、使用绑定变量、跟踪语句等。
在使用SQL*Plus
的编辑命令时可以使用斜杠(/
)加回车命令使最后输入的SQL语句再次被运行。
SQL*Plus
有自己内嵌的命令行编辑器,它允许在SQL*Plus
中编辑已经保存在缓冲区中的语句。SQL*Plus
的行
编辑命令如表所示。
# 示例
SQL> L
1* select * from dept
SQL>
在SQL*Plus
中有一个命令,允许定义直接在SQL*Plus
中使用的编辑器,其格式为:
define_editor=editor_name
其中,editor_name
是用户选择的编辑器的名称。在UNIX 系统中,该编辑器可以是vi
,在虚拟内存系统(Virtual
Memory System,VMS)中可以是edt
,在 Windows操作系统中可以是notepad
。
# 示例
SQL> define_editor=notepad
为了使用以上用户自定义的编辑器,输入命令edit
或者缩写ed
,Oracle 将使用用户在define_editor
命令中定
义的编辑器。例如,在Windows XP 操作系统下,启动SQL*Plus
后执行ed
命令,将打开记事本
程序,缓冲区中
的SQL 语句会自动出现在编辑器中。
ed
在SQL*Plus
中,可以将一个或多个SQL
命令、PL/SQL
块和SQL*Plus
命令存储在命令文件中,其方式包括SAVE
命令、INPUT
命令、EDIT
命令3种。
# 格式
SAVE file_name
使用SAVE
命令可以直接将缓冲区中的SQL 语句保存到在当前路径或指定路径下指定的文件中,扩展名是.SQL
,
说明是一个SQL查询文件。
SQL> SAVE C:\Users\zhangshixing\Desktop\temp\select
已创建 file C:\Users\zhangshixing\Desktop\temp\select.sql
可以将INPUT
和SAVE
命令结合使用,使用 INPUT
命令将SQL*Plus
命令输入到缓冲区中,然后可以使用SAVE
命
令保存到文件中。
SQL> input select deptno from dept;
SQL> input select dname from dept;
SQL> input select loc from dept;
SQL> L *
3* select loc from dept
SQL> SAVE C:\Users\zhangshixing\Desktop\temp\select
已创建 file C:\Users\zhangshixing\Desktop\temp\select.sql
SQL>
select.sql
文件的内容:
select deptno from dept
select dname from dept
select loc from dept
/
可以直接使用EDIT
命令创建文件。
EDIT C:\Users\zhangshixing\Desktop\temp\select1
在代码中加入注释能够提高可读性,在SQL*Plus
中加入注释的方式包括REMARK
命令、/*...*/
、--
3种。
使用REMARK
命令在一个命令文件的一行上加注释。例如:
creatreport.sql
文件内容:
remark 今天是个好日子;
select * from dept;
SQL> @C:\Users\zhangshixing\Desktop\temp\creatreport.sql
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
/*...*/
使用 SQL 注释分隔符/*...*/
可以对一个命令文件的一行或多行加注释。例如:
/*only female*/
WHERE_SEX='FEMALE'
使用 ANSI/ISO 样式注释--
对单行进行注释。例如:
--清除屏幕
CLEAR SCREEN
-- scr代表screen
clear scr
运行SQL 命令和 PL/SQL 块有三种方式,分别为命令行方式、SQL缓冲区方式、命令文件方式。
在命令后面加分号(;
)作为终止符来运行SQL命令的方式。
SQL*Plus
提供了 RUN
命令和斜杠(/
)命令来以缓冲区方式执行SQL命令。
# RUN命的格式为
R[un]
SQL> R
1* select LOC from dept
LOC
-------------
NEW YORK
DALLAS
CHICAGO
BOSTON
SQL>
RUN命令列出并执行当前存储在缓冲区中的SQL 命令或PL/SQL块,它可以显示缓冲区的命令并返回查询的结果,并
使缓冲区中的最后一行成为当前行。
斜杠(/
)命令类似于RUN 命令,它执行存储在缓冲区中的SQL 命令或 PL/SQL块,但不显示缓冲区的内容,也不会
使缓冲区的最后一行成为当前行。
SQL> /
LOC
-------------
NEW YORK
DALLAS
CHICAGO
BOSTON
SQL>
以命令文件方式运行一个SQL命令或SQL*Plus命令或PL/SQL块,有两种方式:START 命令
和@命令
。
# START命令的格式为
START file_name[.sql][argl arg2]
SQL*Plus
在当前路径下查找具有在START
命令中指定的文件名和扩展名的文件。如果没有找到,将在SQLPATH
环境变量定义的目录中查找。参数部分([arg1 arg2])
代表用户希望传递给命令文件中的参数值,必须是如下格
式:&1、&2
(或者&&1、&&2
)。如果输入一个或多个参数,SQL*Plus
使用这些值替换命令文件中的参数。
SQL> START C:\Users\zhangshixing\Desktop\temp\creatreport.sql
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
@
命令与START
命令的功能相似,唯一的区别是@
命令既可在SQL*Plus
会话内部运行,又可在启动SQL*Plus
时
的命令行级别运行,而START命令只能在SQL*Plus
会话内部运行。
SQL> @C:\Users\zhangshixing\Desktop\temp\creatreport.sql
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
提示:此外,使用 EXECUTE
命令能够直接在SQL*Plus
提示符下执行单条PL/SQL
语句,而不需要从缓冲区或命
令文件中执行。
# 使用DEFINE定义
DEFINE NEWSTU = ZHANGSAN
SQL> DEFINE NEWSTU = ZHANGSAN
SQL> DEFINE
DEFINE _DATE = "28-9月 -22" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcl" (CHAR)
DEFINE _USER = "SCOTT" (CHAR)
DEFINE _PRIVILEGE = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1102000100" (CHAR)
DEFINE _EDITOR = "Notepad" (CHAR)
DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR)
DEFINE _O_RELEASE = "1102000100" (CHAR)
DEFINE _RC = "0" (CHAR)
DEFINE NEWSTU = "ZHANGSAN" (CHAR)
SQL>
替代变量是在用户变量名前加入一个或两个&
符号的变量。当SQL*Plus
遇到一个替代变量时,SQL*Plus
执行命
令,好像它包含替代变量的值一样。
SELECT &SORTCOL,SALARY FROM &MYTABLE WHERE SALARY>15000;
等价于:
SELECT TEA_ID,SALARY FROM TEA_VIEW WHERE SALARY>15000;
在编写SQL*Plus
命令时,也可以使用START
命令将命令文件的参数值传给替代变量,这时需要将&
符号置于命令
文件数字的前面,替换替代变量。当每次运行该命令文件时,START
使用第一个值替换&1
,使用第二个值替换
&2
,依此类推。
MYFILE.sql
文件的内容:
select * from dept where DEPTNO = '&1' and DNAME = '&2';
SQL> START C:\Users\zhangshixing\Desktop\temp\MYFILE 10 ACCOUNTING;
原值 1: select * from dept where DEPTNO = '&1' and DNAME = '&2'
新值 1: select * from dept where DEPTNO = '10' and DNAME = 'ACCOUNTING'
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
SQL>
在SQL*Plus
中,可以使用PROMPT
、ACCEPT
、PAUSE
命令与最终用户进行通信,发送消息到屏幕,并接受最终
用户的输入。其具体功能介绍如下:
PROMPT
:用于在屏幕上显示定义的消息,提示用户操作。
ACCEPT
:用于提示用户输入值,并将输入的值存储在定义的变量中,可以控制输入的数据类型。
如果希望用户读取屏幕上的提示信息后,按键再继续让用户输入,可以使用SQL*Plus
提供的PAUSE
命令。
SQL> CLEAR BUFFER
buffer 已清除
SQL> PROMPT Please input a valid class
Please input a valid class
SQL> PAUSE Press Enter to continue
Press Enter to continue
SQL> ACCEPT CLASSNO NUMBER PROMPT 'Class no:'
Class no:1
SQL>
使用VARIABLE
命令在SQL*Plus
中创建绑定变量。
VARIABLE ret_val NUMBER
在PL/SQL 中通过输入冒号(:
)引用绑定变量,如:
:ret_val :=1;
当需要在SQL*Plus
中改变绑定变量的值时,须进入PL/SQL,如:
SQL> variable ret_val NUMBER;
SQL> begin
2 :ret_val :=8;
3 end;
4 /
PL/SQL 过程已成功完成。
SQL> print ret_val;
RET_VAL
----------
8
SQL>
SQL*Plus
也提供了REFCURSOR
来绑定变量,使 SQL*Plus
能够提取和格式化PL/SQL块中包含的 SELECT 语句返
回的结果。
【下面举例说明如何创建、引用和显示REFCURSOR
绑定变量】
SQL> VARIABLE tea_info REFCURSOR
SQL> begin
2 OPEN:tea_info FOR select deptno,dname from dept;
3 end;
4 /
PL/SQL 过程已成功完成。
SQL> print tea_info;
DEPTNO DNAME
---------- --------------
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
SQL>
【下面举例在存储过程中使用REFCURSOR
绑定变量】
# step1定义类型
CREATE OR REPLACE PACKAGE cv_type
AS
TYPE TeaInfoType is REF CURSOR
RETURN dept%ROWTYPE;
END cv_type;
/
# step2创建存储过程
CREATE OR REPLACE PROCEDURE TeaInfo_rpt
(tea_cv IN OUT cv_type.TeaInfoType)
AS
BEGIN
OPEN tea_cv FOR select deptno,dname,loc from dept;
END TeaInfo_rpt;
/
# step3执行带有SQL*Plus绑定变量的过程。
VARIABLE odcv REFCURSOR
EXECUTE TeaInfo_rpt(:odcv)
PRINT odcv
SQL> VARIABLE odcv REFCURSOR
SQL> EXECUTE TeaInfo_rpt(:odcv)
PL/SQL 过程已成功完成。
SQL> PRINT odcv
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
该过程可以使用相同或不同的 REFCURSOR
绑定变量执行多次。
SQL> VARIABLE pcv REFCURSOR
SQL> EXECUTE TeaInfo_rpt(:pcv)
PL/SQL 过程已成功完成。
SQL> print pcv
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
# step4在存储的函数中使用绑定变量
CREATE OR REPLACE FUNCTION TeaInfo_fn
RETURN cv_type.TeaInfoType
IS
resultset cv_type.TeaInfoType;
BEGIN
OPEN resultset FOR select deptno,dname,loc from dept;
RETURN(resultset);
END;
/
SQL> VARIABLE rc REFCURSOR
SQL> EXECUTE :rc := TeaInfo_fn
PL/SQL 过程已成功完成。
SQL> print rc
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
可以通过SQL
优化器和语句执行统计自动获得执行路径的报告,该报告在成功执行了SQL DML
以后生成,对于监
视和调整这些语句的性能是非常重要的。
可以设置AUTOTRACE
系统变量控制报告。
SET AUTOTRACE OFF
:不生成AUTOTRACE
报告,是默认情况。
SET AUTOTRACE ON EXPLAIN
:AUTOTRACE
报告只显示优化器执行路径的报告。
SET AUTOTRACE ON STATISTICS
:AUTOTRACE
显示SQL语句执行统计。
SET AUTOTRACE ON
:AUTOTRACE
报告优化器执行路径和 SQL 语句执行统计。
SET AUTOTRACE TRACEONLY
:SET AUTOTRACE ON
类似,但压缩了用户查询输入的打印。
为了使用这些特性,必须先在方案中创建 PLAN TABLE
表,然后将 PLUSTRACE
角色赋予用户,这需要DBA
授权。
其具体操作过程如下:
# Step1在SQL*Plus会话中执行以下命令创建PLAN TABLE
SQL> CONNECT HR/hrroot
已连接。
SQL> @D:\app\zhangshixing\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlxplan.sql;
表已创建。
# 查看表Plan_Table的结构,具体该表的字段解释,请打开官方网站查阅
# https://docs.oracle.com/cd/B28359_01/server.111/b28320/statviews_5127.htm#REFRN29510
SQL> desc PLAN_TABLE;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
STATEMENT_ID VARCHAR2(30)
PLAN_ID NUMBER
TIMESTAMP DATE
REMARKS VARCHAR2(4000)
OPERATION VARCHAR2(30)
OPTIONS VARCHAR2(255)
OBJECT_NODE VARCHAR2(128)
OBJECT_OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(30)
OBJECT_ALIAS VARCHAR2(65)
OBJECT_INSTANCE NUMBER(38)
OBJECT_TYPE VARCHAR2(30)
OPTIMIZER VARCHAR2(255)
SEARCH_COLUMNS NUMBER
ID NUMBER(38)
PARENT_ID NUMBER(38)
DEPTH NUMBER(38)
POSITION NUMBER(38)
COST NUMBER(38)
CARDINALITY NUMBER(38)
BYTES NUMBER(38)
OTHER_TAG VARCHAR2(255)
PARTITION_START VARCHAR2(255)
PARTITION_STOP VARCHAR2(255)
PARTITION_ID NUMBER(38)
OTHER LONG
DISTRIBUTION VARCHAR2(30)
CPU_COST NUMBER(38)
IO_COST NUMBER(38)
TEMP_SPACE NUMBER(38)
ACCESS_PREDICATES VARCHAR2(4000)
FILTER_PREDICATES VARCHAR2(4000)
PROJECTION VARCHAR2(4000)
TIME NUMBER(38)
QBLOCK_NAME VARCHAR2(30)
OTHER_XML CLOB
SQL>
# Step2在SQL*Plus会话中使用下面命令创建PLUSTRACE角色,将该角色授予DBA
SQL> CONNECT PLUSTRACE/PLUSTRACE AS SYSDBA
已连接。
SQL> @D:\app\zhangshixing\product\11.2.0\dbhome_1\sqlplus\admin\plustrce.sql
SQL> drop role plustrace;
drop role plustrace
*
第 1 行出现错误:
ORA-01919: 角色 'PLUSTRACE' 不存在
SQL> create role plustrace;
角色已创建。
SQL>
SQL> grant select on v_$sesstat to plustrace;
授权成功。
SQL> grant select on v_$statname to plustrace;
授权成功。
SQL> grant select on v_$mystat to plustrace;
授权成功。
SQL> grant plustrace to dba with admin option;
授权成功。
SQL>
SQL> set echo off
SQL>
# Step3执行下面命令将PLUSTRACE角色授权给HR用户。
SQL> CONNECT / AS SYSDBA
已连接。
SQL> GRANT PLUSTRACE TO HR;
授权成功。
SQL>
在SQL*PLUS
的窗口运行以下命令:
set time on
: (说明:打开时间显示)
set autotrace on
: (说明:打开自动分析统计,并显示SQL语句的运行结果)
set autotrace traceonly
:(说明:打开自动分析统计,不显示SQL语句的运行结果)
set autotrace on explan
:(说明:显示SQL语句的运行结果和执行计划,不打开自动分析统计)
接下来你就运行测试SQL语句,看到其分析统计结果了。一般来讲,我们的SQL语句应该避免全表扫描。
关闭以上功能,在SQL/PLUS
的窗口运行以下命令:
set time off
: (说明:关闭时间显示)
set autotrace off
: (说明:关闭自动分析统计)
执行计划显示了SQL
优化器执行查询的路径,执行计划的每行都包含一个序列号,SQL*Plus
显示了该操作的序列
号。PLAN_TABLE
表中列的格式可用COLUMN
命令修改,可以用EXPLAIN PLAN
命令生成执行计划输出。
当语句执行时,请求服务器资源,服务器就会生成统计信息,在统计中的客户就是SQL*Plus
。Oracle Net
指的
是SQL*Plus
与服务器之间的进程通信。用户不能改变统计报告的格式。
通过explain plan for
指令分析SQL语句的执行计划。
SQL> explain plan for
2 select count(*) from employees;
已解释。
SQL>
查看表Plan_Table
中的SQL语句执行计划信息。
SQL> set linesize 9999;
SQL> select id,operation,options,object_name,position from plan_table;
ID OPERATION OPTIONS
OBJECT_NAME POSITION
---------- ------------------------------ -------------------------------------------------------------------------------------------------------------------------------
0 SELECT STATEMENT
1
1 SORT AGGREGATE
1
2 INDEX FULL SCAN
EMP_EMAIL_UK 1
SQL>
从输出结果,我们可以看到SQL
语句的执行过程,结果的最后一行,ID
说明步骤标识,OPERATION
为INDEX
说明
该步骤的行为是索引操作,OPTIONS
为FAST FULL SCAN
说明使用索引快速全扫描,OBJECT_NAME
说明行为的对
象为EMP_EMAIL_UK
。
使用AUTOTRACE
指令可以跟踪SQL
语句并分析其执行步骤,统计信息如物理读数据量,磁盘和内存排序数据量。
但是要执行该指令需要设置几个参数。
SQL_TRACE
:该参数说明是否启动对SQL
语句的追踪。默认该参数为FALSE
,要启用AUTOTRACE
功能需要将
参数SQL_TRACE
设置为TRUE
,该参数可以动态改变。注意,在不需要追踪SQL
语句时,最好将该参数设置为
FALSE
,因为它会造成跟踪所有执行的SQL
语句,这样会产生大量的TRC
文件,对磁盘空间有一定的冲击。
USER_DUMP_DEST
:该参数说明SQL
语句追踪文件的记录位置,在笔者的计算机上其默认目录为:
D:\app\zhangshixing\product\11.2.0\dbhome_1\RDBMS\trace
TIMED_STATISTICS
:该参数可以使用ALTER SYSTEM
或ALTER SESSION
动态设置。默认参数值为TRUE
。
所以, 我们只需要设置参数SQL_TRACE
来启动对SQL
语句执行的追踪。
SQL> alter system set sql_trace = true;
系统已更改。
SQL>
使用AUTOTRACE
追踪SQL语句执行计划。
SQL> set autotrace traceonly;
SQL> select * from hr.employees;
已选择107行。
执行计划
----------------------------------------------------------
Plan hash value: 1445457117
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 107 | 7383 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMPLOYEES | 107 | 7383 | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
15 consistent gets
0 physical reads
0 redo size
9548 bytes sent via SQL*Net to client
493 bytes received via SQL*Net from client
9 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
107 rows processed
SQL>
AUTOTRACE
结果分两部分,一部分是SQL
语句的执行计划,一部分是统计信息。从执行计划可以清楚看出SQL
语
句的执行步骤,访问的对象以及消耗的CPU
。
下面我们详细介绍统计信息中每一行的含义:
recursive calls
:递归调用的次数。
db block gets
:读数据块的数量。
consistent gets
:总的逻辑I/O。
physical reads
:物理I/O。
redo size
:重做数量。
bytes sent via SQL*Net to client
:SQL*Net
通信。
bytes received via SQL*Net from client
。
SQL*Net roundtrips to/from client
。
sorts (memory)
:内存排序统计。
sorts (disk)
:磁盘排序统计。
rows processed
:被检索的行数。
分析完毕后,记得要关闭AUTOTRACE
功能。
SQL> alter system set sql_trace = false;
系统已更改。
SQL> SET AUTOTRACE OFF;
SQL*Plus
有一组系统变量。可以用来设置或自定义SQL*Plus
的操作环境。如设置每行最多显示多少个字符、每
页最多显示多少行、是否自动提交、是否允许服务器输出、某个输出列的标题和格式、输出页的标题和脚注等。这
是SQL*Plus
最灵活的地方,只要不关闭当前的SQL*Plus
程序,无论是切换到哪个用户,这个环境的设置都是相
同的。
在Oracle 数据库中,用于维护SQL*Plus
系统变量的命令包括SHOW
和SET
。
SHOW
命令可以用来显示当前SQL*Plus
环境中的系统变量,还可以显示错误信息、初始化参数、当前用户等信
息。该命令的格式是:
SHO[w] option
其中,option
包含的选项有:
system_variable,ALL,BTI[TLE],ERR[ORS][{FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY|
TRIGGER|VIEW|TYPE|TYPE BODY}[schema.]name],PARAMETERS[parameter_name],
REL[EASE],REPF[OOTER],REPH[EADER],SGA,SPOO[L],SQLCODE,TT[ITLE],USER。
SHOW
命令的基本功能如表所示。
SET
命令用于设置系统变量的值,以便于更改SQL*Plus
的环境设置。该命令的格式为:
SET system_variablel valuel[system_variable2 value2]...
其中,system_variable
是系统变量名称,value
是给该变量所赋予的值。通过SET
命令设置的系统变量很
多,可以在SQL*Plus
中使用HELP SET
命令来查看SET
命令的功能,还可以设置所有系统变量。
用于设置从数据库中一次提取的行数,默认值为15
。
SQL> SET arraysize 20;
SQL> SHOW arraysize;
arraysize 20
用于在执行DML 语句时设置是否自动提交,默认值为OFF
。当设置为ON
并设置为n时,表示成功执行n条SQL语句
或PL/SQL块后自动提交。
SQL> SHOW autocommit;
autocommit OFF
SQL> SET autocommit 5;
SQL> SHOW autocommit;
AUTOCOMMIT ON 用于所有 5 DML 语句
SQL>
用于设置在选定列之间的分隔符,默认为空格。
在用START
命令执行一个脚本文件时,ECHO
命令用于控制是否显示脚本文件中正在执行的SQL
语句。默认值为
OFF
。
当一个查询选择出至少n
行记录时,就会在结果集的项显示返回的行数,默认值是6
。
用于说明是否显示查询结果的列标题,默认值为ON
,表示显示列标题。
Heading separator
,指定后面的标点符号用于将页标题或列标题分行显示。默认值为|
。
设置每行显示的字符个数,即宽度,默认值为80
。
设置分隔页与页之间的空白行数。
设置每页显示的行数(其中包括了TITLE
、BTITLE
、COLUMN
标题以及显示的空行),默认值是14
。
设置每页输出时是否暂停,如果设置了PAUSE text
,则会在左下角显示text
。
用于控制是否显示PL/SQL
块或存储过程的输出,即允许函数DBMS_OUTPUT.PUT_LINE()
的输出显示在屏幕上。默
认值为OFF
,即当调用该函数时不会在SQL*Plus
屏幕上显示输出结果。
用于设置SQL*Plus
的命令提示符,默认值为SQL>
。
用于设置是否在SQL*Plus
命令提示符前显示系统的当前时间,默认值为OFF。如果设置成ON,则可以从提示符
前的时间大致跟踪SQL语句、PL/SQL块的执行时间、花费时间。还可以利用闪回技术,查询那个时刻数据库中某
个表的数据,甚至将该表闪回到那个时刻的数据。
用于设置是否显示执行SQL
语句、PL/SQL
块的花费时间,默认值为OFF
。
用于设置是否将SPOOL
输出中每行后面多余的空格去掉。默认值是OFF
。
用于设置下划线字符的符,,默认值为_
。
在交互使用替换变量时,用于设置是否列出一个SQL
语句在获得替换变量的值前后的文本内容。默认值是ON
,即
显示前后文本的内容,若设置为OFF
,则表示不显示。
可以使用STORE SET
命令将当前的设置保存到一个脚本文件中,以便以后用START
命令来运行该脚本文件,重现
当前的环境变量。STORE SET
命令的语法格式为:
STORE{SET}filename[.ext][CRE[ATE]|REP[LACE]|APP[END]]
脚本文件的默认扩展名是.sql
,如果filename
中不包含路径,则脚本文件保存在与sqlplus.exe
相同的路径
下。
SQL*Plus
提供了一系列有关脚本文件和假脱机
文件的操作命令,设置其系统变量、格式化输出、建立交互式操作
方式的命令,并且往往每种命令还有若干可选项。
假脱机输出的命令如下:
spool 文件名
上述命令表示将这之后的各种操作及执行结果假脱机
,即存盘到磁盘文件上,默认文件扩展名为.lst
。
停止假脱机的命令如下:
spool off
在使用SQL*Plus
过程中,为了获取帮助,只需要在SQL*Plus
的命令提示符下,输入HELP
和命令名称,再回车
即可。
假如在SQL>
提示符下,输入HELP select
或?select
,再按回车键,将会显示出有关select
命令的帮助信息。
使用SQL*Plus
格式化查询结果,可以生成一个格式良好的报告。
通过SQL*Plus
的COLUMN
命令,可以改变列的标头,重新格式化查询中列的数据。
当显示列标题时,可以使用默认的标头,也可以使用COLUMN
命令修改列标头。当我们要显示查询结果时,
SQL*Plus
使用列或者表达式名称作为列的标题。如果需要改变默认标题,可以使用COLUMN
命令,格式为:
COLUMN column_name HEADING column_heading
COLUMN FIRST_NAME HEADING "FIRSTNAME";
COLUMN LAST_NAME HEADING "LASTNAME";
SELECT FIRST_NAME ,LAST_NAME FROM hr.employees;
SQL> SELECT FIRST_NAME ,LAST_NAME FROM hr.employees;
FIRSTNAME LASTNAME
-------------------- -------------------------
Ellen Abel
Sundar Ande
Mozhe Atkinson
David Austin
Hermann Baer
Shelli Baida
Amit Banda
Elizabeth Bates
Sarah Bell
David Bernstein
Laura Bissot
# 也可以拆分列标题
COLUMN FIRST_NAME HEADING "FIRST|NAME";
COLUMN LAST_NAME HEADING "LAST|NAME";
SELECT FIRST_NAME ,LAST_NAME FROM hr.employees;
SQL> SELECT FIRST_NAME ,LAST_NAME FROM hr.employees;
FIRST LAST
NAME NAME
-------------------- -------------------------
Ellen Abel
Sundar Ande
Mozhe Atkinson
David Austin
Hermann Baer
Shelli Baida
Amit Banda
Elizabeth Bates
Sarah Bell
David Bernstein
NUMBER
列的宽度等于标题的宽度或者是FORMAT
的宽度加上一个空格,如果没有显示使用FORMAT
,这列的宽度至
少是SET NUMWIDTH
的值。一般情况下,SQL*Plus
尽可能显示数字,直到SET
命令设置的NUMWIDTH
变量的值。
如果数字多于NUMWIDTH
的值,则SQL*Plus
将截断该值,使它达到所允许的最大数字数。格式化列的格式为:
COLUMN column_name FORMAT model
# 使用逗号或美元符号,可以将值限定为给定的十进制数字。
COLUMN SALARY FORMAT $9,990;
SELECT SALARY FROM hr.employees;
SQL> SELECT SALARY FROM hr.employees;
SALARY
-------
$2,600
$2,600
$4,400
#######
$6,000
$6,500
#######
#######
$8,300
#######
#######
当显示数据类型时,可以使用SQL*Plus
的COLUMN
命令进行修改,其中包括CHAR
、NCHAR
、
VARCHAR2(VARCHAR)
、NVARCHAR2(NCHAR VARYING)
、DATE
、LONG
、CLOB
、NCLOB
。
如果定义列的宽度小于列的标题,SQL*Plus
截断标题,如果为LONG
、CLOB
和NCLOB
定义宽度,SQL*Plus
使用
LONGCHUNKSIZE
或者定义的宽度。
# 设置FIRST_NAME列的宽度为1个字符
COLUMN FIRST_NAME FORMAT A1;
SELECT FIRST_NAME FROM hr.employees;
SQL> SELECT FIRST_NAME FROM hr.employees;
F
N
-
E
l
l
e
n
S
u
n
d
# 设置FIRST_NAME列的宽度为1个字符
COLUMN FIRST_NAME FORMAT A2;
SELECT FIRST_NAME FROM hr.employees;
SQL> SELECT FIRST_NAME FROM hr.employees;
FI
NA
--
El
le
n
Su
nd
ar
当希望多列有相同的显示属性时,可以在COLUMN
命令中使用LIKE
子句。
COLUMN <目标字段名> LIKE <来源字段名> HEADING <标题名>
COLUMN FIRST_NAME FORMAT A3;
COLUMN LAST_NAME LIKE FIRST_NAME HEADING LASTNAME;
SELECT FIRST_NAME ,LAST_NAME FROM hr.employees;
SQL> SELECT FIRST_NAME ,LAST_NAME FROM hr.employees;
FIR
NAM LAS
--- ---
Ell Abe
en l
Sun And
dar e
Moz Atk
he ins
on
使用COLUMN
命令可以列出给定的当前显示属性,其格式为:
COLUMN column_name
SQL> COLUMN FIRST_NAME
COLUMN FIRST_NAME ON
HEADING 'FIRST|NAME' headsep '|'
FORMAT A3
SQL>
提示:若只使用COLUMN
不带参数的命令,则可以显示所有列的属性。
SQL> COLUMN
COLUMN LASTNAME ON
HEADING 'LASTNAME'
FORMAT A3
COLUMN WATER ON
HEADING 'BONUS'
FORMAT $9,990
COLUMN SALARY ON
FORMAT $9,990
COLUMN LAST_NAME ON
HEADING 'LASTNAME'
FORMAT A3
COLUMN FIRST_NAME ON
HEADING 'FIRST|NAME' headsep '|'
FORMAT A3
重新设置列的显示属性为默认情况,可使用下面的格式:
COLUMN column_name CLEAR
SQL> COLUMN LAST_NAME CLEAR
SQL>
当显示的值不适合列的宽度时,SQL*Plus
将列的值设为附加行。如果希望插入一个记录分隔符,可使用SET
命令
的RECSEP
和RECSEPCHAR
关键字。其中,RECSEP
决定何时打印字符行,如果将RECSEP
设置为EACH
,则在每行
后面进行打印,如果将RECSEP
设置为WRAPPED
(这也是RECSEP的默认值)则在包装行后面打印,如果设置为OFF则
压缩打印。
当在SQL SELECT
命令中使用ORDER BY
子句时,在输出时将对数据排序,使用SQL*Plus
的BREAK
和COMPUTE
命令可以创建记录的子集合,添加空格和概述行。
# 使用 BREAK和COMPUTE命令查询示例
SELECT DEPARTMENT_ID,LAST_NAME,SALARY FROM hr.employees WHERE SALARY>2000 ORDER BY DEPARTMENT_ID;
SQL> SELECT DEPARTMENT_ID,LAST_NAME,SALARY FROM hr.employees WHERE SALARY>2000 ORDER BY DEPARTMENT_ID;
DEPARTMENT_ID LAST_NAME SALARY
------------- ------------------------- -------
10 Whalen $4,400
20 Hartstein #######
20 Fay $6,000
30 Raphaely #######
30 Colmenares $2,500
30 Khoo $3,100
30 Baida $2,900
30 Tobias $2,800
30 Himuro $2,600
40 Mavris $6,500
50 OConnell $2,600
# 使用BREAK命令
BREAK ON DEPARTMENT_ID;
SELECT DEPARTMENT_ID,LAST_NAME,SALARY FROM hr.employees WHERE SALARY>2000 ORDER BY DEPARTMENT_ID;
SQL> SELECT DEPARTMENT_ID,LAST_NAME,SALARY FROM hr.employees WHERE SALARY>2000 ORDER BY DEPARTMENT_ID;
DEPARTMENT_ID LAST_NAME SALARY
------------- ------------------------- -------
10 Whalen $4,400
20 Hartstein #######
Fay $6,000
30 Raphaely #######
Colmenares $2,500
Khoo $3,100
Baida $2,900
Tobias $2,800
Himuro $2,600
40 Mavris $6,500
50 OConnell $2,600
如果执行下面命令,可以在列的值改变时,插入1个空白行。
BREAK ON DEPARTMENT_ID SKIP 1
SELECT DEPARTMENT_ID,LAST_NAME,SALARY FROM hr.employees WHERE SALARY>2000 ORDER BY DEPARTMENT_ID;
SQL> SELECT DEPARTMENT_ID,LAST_NAME,SALARY FROM hr.employees WHERE SALARY>2000 ORDER BY DEPARTMENT_ID;
DEPARTMENT_ID LAST_NAME SALARY
------------- ------------------------- -------
10 Whalen $4,400
20 Hartstein #######
Fay $6,000
30 Raphaely #######
Colmenares $2,500
Khoo $3,100
Baida $2,900
Tobias $2,800
Himuro $2,600
如果使用了BREAK
命令将输出的行分为子集,则可以使用SQL*Plus
的COMPUTE
函数对每个子集进行一些计算。计
算函数如表所示。
列出当前BREAK
的定义的命令:
BREAK
SQL> BREAK
break on DEPARTMENT_ID skip 1 nodup
# 计算输出薪资总和
BREAK ON REPORT;
COMPUTE SUM LABEL TOTAL OF SALARY ON REPORT;
SELECT LAST_NAME,SALARY FROM hr.employees WHERE JOB_ID='FI_ACCOUNT';
SQL> SELECT LAST_NAME,SALARY FROM hr.employees WHERE JOB_ID='FI_ACCOUNT';
LAST_NAME SALARY
------------------------- -------
Faviet $9,000
Chen $8,200
Sciarra $7,700
Urman $7,800
Popp $6,900
-------
TOTAL #######
# 计算输出平均薪资
BREAK ON REPORT;
COMPUTE AVG LABEL AVG OF SALARY ON REPORT;
SELECT LAST_NAME,SALARY FROM hr.employees WHERE JOB_ID='FI_ACCOUNT';
SQL> SELECT LAST_NAME,SALARY FROM hr.employees WHERE JOB_ID='FI_ACCOUNT';
LAST_NAME SALARY
------------------------- -------
Faviet $9,000
Chen $8,200
Sciarra $7,700
Urman $7,800
Popp $6,900
-------
AVG $7,920
当数据库中的数据比较多时,为了使显示的结果美观合理,我们可以在每页上添加上标题和下标题,也可以设置每
页显示的行数和每行的宽度,还可以在每个报告上加标题和脚注。
从前面知道使用TITLE
命令可以设置上标题,还可以使用BTITLE
命令设置每页的下标题和题头,使用
REPHEADER
命令定义报告题头,使用REPFOOTER
命令定义报告脚注。
如果需要显示当前页的序号和标题中系统维护值时,可使用下面的命令:
TITLE LEFT system_maintained_value_name
为了列出标题定义,可以使用下面的命令:
TITLE
BTITLE
为了压缩标题定义,可使用下面命令:
TITLE OFF
BTITLE OFF
如果需要恢复当前定义,可输入下面命令:
TITLE ON
BTITLE ON
在上标题引用一个列值,将值存储在变量中,在TITLE
命令中再引用该变量。定义变量的格式:
COLUMN column_name NEW VALUE variable_name
为了对输出报告加入日期,需要在SQL*Plus
的LOGIN
文件中加入下面的命令来创建变量:
SET TERMOUT OFF
BREAK ON TODAY
COLUMN TODAY NEW_VALUE_DATE
SELECT TO_CHAR(SYSDATE,'fmMonth DD,YYYY') TODAY FROM DUAL;
CLEAR BREAKS
SET TERMOUT ON
为了显示日期,可以在标题中引用_DATE
。
SQL*Plus
在每页上显示的数据的数量依赖于当前页的维。
SQL*Plus
使用默认页时,上标题前的行数是1
,每页的行数是24
,每行的字数是80
。可使用SET
命令的
NEWPAGE
子句来设置每页开始和上标题间的行数:
SET NEW PAGE number_of_lines
使用PAGESIZE
设置每页的行数:
SET PAGESIZE number_of_lines
将每页设置为60行,清除屏幕,设置行大小为75的命令为:
SET PAGESIZE 60
SET NEWPAGE O
SET LINESIZE 75
可以使用SHOW
命令列出这些变量的当前值:
SHOW PAGESIZE
SHOW NEWPAGE
SHOW LINESIZE
在输出结果时,可以使用SPOOL
命令将查询结果存储到文件中,并同时在屏幕上显示,格式:
SPOOL file_name
当在不同软件产品间移动数据时,有必要用flat
文件。使用SQL*Plus
创建一个flat
文件,要先使用SET
设置:
SET NEWPAGE O
SET SPACE O
SET LINESIZE O
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET MARKUP HTML OFF SPOOL OFF
若想把结果直接在打印机上打印出来,则可以使用命令SPOOL OUT
来实现;若在输入到文件或打印机时,不想在
屏幕上看到输出,则可以用SET TERMOUT OFF
命令来实现。
文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大
文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码
文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版
文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗
文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程
文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0
文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader
文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型
文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写
文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录
文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点
文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文