一、QuickStart
Starting SQL*Plus Command-line:
TNS_ADMIN环境变量定义tnsnames.ora文件的位置
二、GettingStart
SQLPLUS用到的系统环境变量[UNIX]:
TWO_TASK:UNIX环境下定义默认的链接串
TWO_TASK=MYDB
export TWO_TASK
sqlplus hr
is the same as:
sqlplus hr@MYDB
ORACLE_SID:Oracle实例名
ORACLE_PATH:脚本搜索路径,如果未设置,则在当前路径下找
ORACLE_HOME:OracleHome
ORA_NLS10:指定NLS数据的存储路径,默认指向$ORACLE_HOME/nls/data
NLS_LANG:SQLPLUS的字符集设置
导入导出中NLS_LANG的作用:
http://www.eygle.com/archives/2004/09/nls_character_set_04.html
SQLPLUS的启动配置:
$ORACLE_HOME/sqlplus/admin/glogin.sql
$ORACLE_HOME/sqlplus/admin/login.sql
区别:
1、SQLPLUS先执行glogin.sql,后执行login.sql
2、login.sql无法作用于iSQLPLUS
特点:
1、在提示符显示之前调用
2、执行顺序:glogin.sql->login.sql->命令行指定的脚本->提示符
C:\Documents and Settings\dbconf>sqlplus "/as sysdba" @test.sql
SQL*Plus: Release 11.1.0.6.0 – Production on 星期四 2月 17 08:53:01 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 – Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
glogin.sql
PL/SQL 过程已成功完成。
login.sql
PL/SQL 过程已成功完成。
my script
PL/SQL 过程已成功完成。
SQL>
保存和恢复SQLPLUS配置[SHOW ALL命令显示的配置]:
STORE SET file_name
恢复配置:
START file_name—-作用和@,@@等效
SQLPLUS修改数据库用户密码:
password [username]
SQLPLUS指定连接描述符:
sqlplus sys/oracle@(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.4.2)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=ora11))) as sysdba
SQLPLUS快速远程连接方式:
sqlplus username/passwd@[//]host[:port][/service_name] [as sysdba]
例:
sqlplus megatrust/megatrust@//172.16.4.2:1521/ora11
SQLPLUS中命令使用帮助:
help index–列出所有的topic
help topic_name
SQLPLUS命令行语法:
SQLPLUS [ [Options] [Logon] [Start] ]
Options:
-C[OMPATIBILITY] {x.y[.z]}
设置客户端兼容性
-H[ELP]
帮助
-V[ERSION]
客户端版本
-L[OGON]
指定连接失败时不提示重新连接而直接推出
-M[ARKUP] "<options>"
options:
HTML ON/OFF:指定SQLPLUS产生HTML代码,sqlplus -M "HTML ON" "/as sysdba"
HEAD text:指定<HEAD></HEAD>之间的内容
BODY text:指定BODY标签属性,text的内容附加在<BODY 和>之间,指定样式、引用Javascript等
TABLE text:指定TABLE标签属性,text的内容附加在<TABLE 和>之间,指定样式、引用Javascript等
ENTMAP {ON|OFF}:是否转化>,<,&和"为HTML实体,默认为ON,关闭实体转化则如果输出中包含>,<,&和",
浏览器会视图将其解析为标签而出错,ENTMAP OFF则允许用户使用自定义HTML标签
SPOOL {ON|OFF}:指定是否在输出文件中使用<HTML><BODY>和</BODY></HTML>进行包裹
PRE[FORMAT] {ON|OFF}:PRE标签将代替TABLE标签
Logon:
连接串
Start:
@script_name
三、Using SQL*Plus
指定n次DML操作后自动进行提交:
set autocommit on/immediate n
排错:oerr
指定编辑器:DEFINE _EDITOR = vi
外部编辑器编辑脚本文件:
ed[it] file_name:不指定file_name则编辑缓冲区
使用SQLPLUS编辑缓冲区脚本:
(DEL,L[IST]/;):删除,显示缓冲区
(DEL,L[IST]) n:删除,显示n行缓冲区
(DEL,L[IST]) *:删除,显示当前行
(DEL,L[IST]) n *:删除,显示从n行至当前行
(DEL,L[IST]) * n:删除,显示从当前行至第n行
(DEL,L[IST]) m n:删除,显示从m行至n行
I[NPUT] text:向缓冲区附加
CLEAR BUFFER/CL:删除缓冲区
C[HANGE]/old/new:更改当前行old为new
A[PPEND] text:向当前行后附加
0 SQL:向缓冲区头部添加SQL
n SQL:修改第n行为SQL
n:指定当前行为第n行
SQL脚本中使用注释:
1.remark
2./* ..*/ 第一个注释符后需跟一个空格
3.–
注意:
1、注释不能在最初的几个关键字之前,SQLPLUS会对/之前的文本解析为命令而提交
CREATE OR REPLACE
/* HELLO */
PROCEDURE HELLO AS
BEGIN
DBMS_OUTPUT.PUT_LINE('HELLO');
END;
/
Warning: Procedure created with compilation errors.
修改为:
CREATE OR REPLACE PROCEDURE
/* HELLO */
HELLO AS
BEGIN
DBMS_OUTPUT.PUT_LINE('HELLO');
END;
/
Procedure created.
使用替代变量:
define colname=MACHINE
select &colname from v$session;
替代变量后附加字符串:
SELECT * FROM v$session where USERNAME='&username.TRUST';
SELECT * FROM v$session where STATUS='IN&state';–变量之前添加字符串则不需要.
分隔符由CONCAT变量定义:
SQL> show concat
concat "." (hex 2e)
&,&&:
&&避免多次输入同一个替代变量,&&输入的变量将被存储在define变量中,而define中定义的变量是可以被&、&&引用的
SQL> select &col,&col,&col from v$session;
输入 col 的值: machine
输入 col 的值: machine
输入 col 的值: machine
原值 1: select &col,&col,&col from v$session
新值 1: select machine,machine,machine from v$session
—–
SQL> select &&col,&col,&col from v$session;
输入 col 的值: machine
原值 1: select &&col,&col,&col from v$session
新值 1: select machine,machine,machine from v$session
SQL> define col
DEFINE COL = "machine" (CHAR)
替代变量无法在buffer编辑命令中使用:
APPEND, CHANGE, INPUT中视&,&&为纯文本
SQL> l
1* select &&col,&col,&col from v$session
SQL> c/&&/&
1* select &col,&col,&col from v$session
影响替代变量的SET选项:
禁止某用户在SQLPLUS中执行某个命令步骤:
1、创建PUP[PRODUCT_USER_PROFILE]表
@?/sqlplus/admin/pupbld.sql
SQL> desc PRODUCT_USER_PROFILE
名称 是否为空? 类型
—————————————– ——– ————————–
PRODUCT NOT NULL VARCHAR2(30)
USERID VARCHAR2(30)
ATTRIBUTE VARCHAR2(240)
SCOPE VARCHAR2(240)
NUMERIC_VALUE NUMBER(15,2)
CHAR_VALUE VARCHAR2(240)
DATE_VALUE DATE
LONG_VALUE LONG
* PRODULE:要限制的命令类型,比如SQL*Plus表示不能SQL*Plus命令如spool,SQL则表示SQL命令如alert,PL/SQL表示PL/SQL命令如BEGIN。不能使用通配符或者NULL。
* USERID:要限制的用户名,可以使用通配符如DEV%
* ATTRIBUTE:要限制的命令,必须是完整的SQL*Plus、SQL或者PL/SQL命令,不能使用通配符。如果是禁用某个角色,则必须为ROLES
* SCOPE:未使用,设为NULL
* NUMERIC_VALUE:未使用,设为NULL
* CHAR_VALUE:如果禁用的是SQL*Plus、SQL或者PL/SQL命令,必须为DISABLED。如果是禁用某个角色,则为角色的名字
* DATE_VALUE:未使用,设为NULL
* LONG_VALUE:未使用,设为NULL
2、禁用
SQL> INSERT INTO PRODUCT_USER_PROFILE VALUES ('SQL*Plus', 'MZH', 'SELECT', NULL, NULL, 'DISABLED', NULL, NULL);
SQL> conn mzh/mzh
SQL> select * from product_user_profile;
SP2-0544: 在产品用户概要文件中禁用命令 "select"
四、SQLPLUS Reference
@
@WKRPT.QRY
@HTTP://machine_name.domain:port/YEAREND.SQL VAL1 VAL2
@FTP://machine_name.domain:port/YEAREND.SQL VAL1 VAL2
@HTTP://machine_name.domain:port/SCRIPTSERVER?ENDOFYEAR VAL1 VAL2
VAL1,VAL2在脚本中使用&1和&2引用
@@
与@不同的是@@一般用于脚本中调用位于同一目录的其他脚本。
/(slash)
执行
ACCEPT
ACC[EPT] variable [NUM[BER] | CHAR | DATE | BINARY_FLOAT | BINARY_DOUBLE] [FOR[MAT]
format] [DEF[AULT] default] [PROMPT text|NOPR[OMPT]] [HIDE]
读取一行输入作为变量variable的值,variable将被存储在define变量
1、输入数字:
SQL> acc snap_id number format 999999 def 999999 prompt 'Please Enter the SNAP_ID:'
SQL> acc snap_id number format 999999 def 999999 prompt 'Please Enter the SNAP_ID:'
Please Enter the SNAP_ID:234234234234
SP2-0598: "234234234234" 与输入格式 "999999" 不匹配
Please Enter the SNAP_ID:sdfefaf
SP2-0598: "sdfefaf" 与输入格式 "999999" 不匹配
Please Enter the SNAP_ID:2323
SQL> define snap_id
DEFINE SNAP_ID = 2323 (NUMBER)
2、输入字符:
SQL> acc snap_id char format a5 def '999999999999999999' prompt 'Please Enter the SNAP_ID:'
SP2-0598: "999999999999999999" 与输入格式 "a5" 不匹配
SQL> acc snap_id char format a5 def '9999' prompt 'Please Enter the SNAP_ID:'
Please Enter the SNAP_ID:23234234234
SP2-0598: "23234234234" 与输入格式 "a5" 不匹配
Please Enter the SNAP_ID:sfasdafasdfad
SP2-0598: "sfasdafasdfad" 与输入格式 "a5" 不匹配
Please Enter the SNAP_ID:12334
SQL>
3、输入时间:
SQL> acc snap_time date format 'yy-mm-dd' def '01-01-01' prompt 'Please Enter the SNAP_TIME:'
Please Enter the SNAP_TIME:03-07-07
SQL> define snap_time
DEFINE SNAP_TIME = "03-07-07" (CHAR)
4、输入浮点类型数据:
SQL> acc snap_id BINARY_FLOAT format 9.9EEEE def 9.9E1 prompt 'Please Enter the SNAP_ID:'
BINARY_FLOAT和BINARY_DOUBLE取值范围:
———————————————————————————
|Value | Binary-Float | Binary-Double
|Maximum positive finite value | 3.40282E+38F | 1.79769313486231E+308
|Minimum positive finite value | 1.17549E-38F | 2.22507485850720E-308
APPEND
添加文本至缓冲区当前行,不换行
ARCHIVE LOG {LIST | STOP} | {START | NEXT | ALL | integer } [TO destination]
LIST:
SQL> archive log list
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 68
当前日志序列 70
自动归档在10g以前可以使用archive log stop|start关闭和开启,10g以后当归档开启之后即为自动归档且无法关闭
ATTRIBUTE
类似于COLUMN命令,作用对象为Object Type
BREAK
对输出结果进行分组显示,如隐藏重复列的值、组分页等,一般需要对重复列进行order by,因为break只会对输出列的上下值进行比较,而不会真正做分组操作
SQL> select * from mzh;
ID NAME
———- ——————–
1 mzh
1 zhm
2 dd
2 ddd
2 dddf
3 dddf
已选择6行。
SQL> break on id;
SQL> /
ID NAME
———- ——————–
1 mzh
zhm
2 dd
ddd
dddf
3 dddf
已选择6行。
每组间隔2行:
SQL> break on id skip 2;
SQL> /
ID NAME
———- ——————–
1 mzh
zhm
2 dd
ddd
dddf
3 dddf
已选择6行。
显示重复行:
SQL> break on id dup;
SQL> /
ID NAME
———- ——————–
1 mzh
1 zhm
2 dd
2 ddd
2 dddf
3 dddf
已选择6行。
每组进行分页:
SQL> break on id skip page;
SQL> /
ID NAME
———- ——————–
1 mzh
zhm
ID NAME
———- ——————–
2 dd
ddd
dddf
ID NAME
———- ——————–
3 dddf
已选择6行。
BTITLE
语法:BTI[TLE] [printspec [text | variable] …] | [ON | OFF]
printspec:
BOLD –粗体,SQLPLUS中则重复输出三次
CE[NTER] –底部标题居中
COL n –底部标题前空开n列
FORMAT text–指定text的显示格式,text可以引用
LE[FT] –左对齐底部标题
R[IGHT] –右对齐底部标题
S[KIP] [n] –底部标题前空开n行
TAB n –底部标题前空开n列
SQL> btitle left 'dbconf report' right '2-17-2011'
SQL> run
1* select * from mzh order by id
ID NAME
———- ——————–
-34 hh
.3 te
1 zhm
mzh
zhm
mzh
zhm
mzh
zhm
mzh
dbconf report 2-17-2011
ID NAME
———- ——————–
1 zhm
mzh
zhm
mzh
zhm
mzh
zhm
mzh
zhm
mzh
dbconf report 2-17-2011
SQL> btitle LEFT 'Monthly Analysis' CENTER '01 Jan 2003' -
> RIGHT 'Page:' FORMAT 999 SQL.PNO SKIP CENTER -
> 'Data in Thousands'
SQL> run
1* select * from mzh
ID NAME
———- ——————–
1 mzh
1 zhm
2 dd
2 ddd
2 dddf
3 dddf
4 rtt
1 mzh
1 zhm
Monthly Analysis 01 Jan 2003 Page: 1
Data in Thousands
CHANGE
C[HANGE]/old/new
更改缓冲区当前行中的old字符为new
CLEAR
BRE[AKS] –清除breaks
BUFF[ER] –清除缓冲区
COL[UMNS] –清除col定义
COMP[UTES] –清除compute
SCR[EEN] –清除屏幕
SQL –清除缓冲区
TIMI[NG] –清除计时器
COLUMN
ALI[AS] alias –定义别名,可以被BREAK, COMPUTE和其他COLUMN命令引用.
CLE[AR] –清除定义
ENTMAP {ON | OFF}–设置列名HTML的实体
FOLD_A[FTER] –此列之后将会换行
FOLD_B[EFORE] –此列之前将会换行
FOR[MAT] format –指定列的输出格式
1、字符类型格式An,A代表alphabetic-字母
SQL> col name format a3
SQL> run
1* select * from mzh
ID NAM
———- —
1 mzh
1 zhm
2 dd
2 ddd
2 ddd
f
3 ddd
f
4 rtt
ID NAM
———- —
1 mzh
1 zhm
2、数值类型格式
SQL> col id format $9
SQL> run
1* select * from mzh
ID NAME
— ——————–
$1 mzh
$1 zhm
$2 dd
$2 ddd
SQL> col id format 09
SQL> run
1* select * from mzh
ID NAME
— ——————–
01 mzh
01 zhm
02 dd
02 ddd
02 dddf
SQL> col id format 9,9
SQL> select * from mzh order by id desc;
ID NAME
—- ——————–
8,9 dfge
4 rtt
4 rtt
4 rtt
4 rtt
4 rtt
SQL> col id for 99.9
SQL> run
1* select * from mzh order by id desc
ID NAME
—– ——————–
89.0 dfge
4.0 rtt
4.0 rtt
4.0 rtt
4.0 rtt
4.0 rtt
4.0 rtt
4.0 rtt
4.0 rtt
4.0 rtt
SQL> col id format b999.999 [如果定点小数整数部分为0,忽略]
SQL> select * from mzh order by id;
ID NAME
——– ——————–
.300 te
1.000 mzh
1.000 zhm
1.000 mzh
SQL> col id for c999.999
SQL> run
1* select * from mzh order by id
ID NAME
————— ——————–
CNY.300 te
CNY1.000 mzh
CNY1.000 zhm
CNY1.000 mzh
CNY1.000 zhm
CNY1.000 mzh
CNY1.000 zhm
CNY1.000 mzh
SQL> col id format 9.99EEEE [科学计数法,一定要包含4个E]
SQL> run
1* select * from mzh
ID NAME
———- ——————–
1.00E+00 mzh
1.00E+00 zhm
2.00E+00 dd
2.00E+00 ddd
SQL> col id format L99 [本地货币符号]
SQL> run
1* select * from mzh
ID NAME
————- ——————–
¥1 mzh
¥1 zhm
¥2 dd
¥2 ddd
¥2 dddf
¥3 dddf
HEA[DING] text
SQL> col name heading name2
SQL> run
1* select * from mzh
ID name2
—– ——————–
1 mzh
1 zhm
2 dd
JUS[TIFY] {L[EFT] | C[ENTER] | R[IGHT]}
设置列名的位置
SQL> col name jus center
SQL> run
1* select * from mzh
ID NAME
———- ——————–
1 mzh
1 zhm
2 dd
2 ddd
2 dddf
3 dddf
4 rtt
1 mzh
1 zhm
2 dd
LIKE {expr | alias}
拷贝列定义
SQL> col id like name;–之后ID列也会像NAME列一样居中对齐
SQL> run
1* select * from mzh
ID NAME
———- ——————–
1 mzh
1 zhm
2 dd
2 ddd
2 dddf
3 dddf
4 rtt
1 mzh
1 zhm
2 dd
2 ddd
ID NAME
———- ——————–
2 dddf
NEWL[INE]
NEW_V[ALUE] variable
NOPRI[NT] | PRI[NT]–隐藏列
SQL> col id noprint
SQL> run
1* select * from mzh
name2
——————–
mzh
zhm
dd
ddd
dddf
NUL[L] text
SQL> col name null 0–替代查询为null的值
SQL> run
1* select * from mzh where name is null
ID NAME
———- ——————–
34 0
OLD_V[ALUE] variable ON | OFF
WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]
SQL> col name wrap word
SQL> run
1* select * from mzh where name like 'wra%'
ID NAME
——– —-
######## wrap
test
SQL> col name wrap trun
SQL> run
1* select * from mzh where name like 'wra%'
ID NAME
——– —-
######## wrap
COMPUTE
SQL> break on id;
SQL> compute num label total of name on id;
SQL> select * from mzh order by id;
ID NAME
——– —-
-34 hh
******** —-
total 1
0 te
******** —-
total 1
1 zhm
mzh
zhm
mzh
zhm
ID NAME
——– —-
1 mzh
zhm
mzh
CONNECT
连接数据库
COPY
拷贝查询结果至一个表或其他数据库,不支持8i之后的一些数据类型和特性,以后的版本中将会被废弃
DEFINE
显示/设置替代变量
SQL> define
DEFINE _DATE = "13-2月 -11" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcl11g" (CHAR)
DEFINE _USER = "SYS" (CHAR)
DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1101000600" (CHAR)
DEFINE _EDITOR = "Notepad" (CHAR)
DEFINE _O_VERSION = "Oracle Database 11g Enterprise Editio
6.0 – Production
With the Partitioning, OLAP, Data Mining and Real Application T
CHAR)
DEFINE _O_RELEASE = "1101000600" (CHAR)
DEFINE _RC = "0" (CHAR)
SQL> select '&&_editor' from dual;
原值 1: select '&&_editor' from dual
新值 1: select 'Notepad' from dual
'NOTEPA
——-
Notepad
SQL> define test=test
SQL> define
DEFINE _DATE = "13-2月 -11" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcl11g" (CHAR)
DEFINE _USER = "SYS" (CHAR)
DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1101000600" (CHAR)
DEFINE _EDITOR = "Notepad" (CHAR)
DEFINE _O_VERSION = "Oracle Database 11g E
6.0 – Production
With the Partitioning, OLAP, Data Mining and Re
CHAR)
DEFINE _O_RELEASE = "1101000600" (CHAR)
DEFINE _RC = "0" (CHAR)
DEFINE TEST = "test" (CHAR)
SQL> select '&&test' from dual;
原值 1: select '&&test' from dual
新值 1: select 'test' from dual
'TES
—-
test
DEL
删除缓冲区的一行或者多行
DESCRIBE
DESC[RIBE] {[schema.]object[@db_link]}
DISCONNECT
提交更改并从数据库中断开,但不退出sqlplus
EDIT
使用编辑器编辑缓冲区或指定的文件
EXECUTE
执行单句PLSQL,一般用于在SQLPLUS中调用存储过程
exec dbms_output.put_line('test');
EXIT
退出
GET
获取文件值缓冲区
SQL> get test.sql
1 set serveroutput on
2* exec dbms_output.put_line('test')
SQL> get test.sql nolist
HELP
help ex –将会同时显示exit和execute的帮助
help index
HOST
SQLPLUS中调用操作系统命令[平台通用]
平台相关的:
windows $
unix !
INPUT
在缓冲区当前行之后添加一行或多行
LIST
显示缓冲区内容
PASSWORD [username]
SQL> password mzh
更改 mzh 的口令
新口令:
重新键入新口令:
口令已更改
PAUSE
暂停脚本执行
test.sql
PAUSE 显示当前SGA状态;
SELECT * FROM V$SGA;
PAUSE 显示当前会话状态;
SELECT * FROM V$SESSION;
SQL>@test.sql
PRINT
输出绑定变量
SQL> VARIABLE n NUMBER
SQL> BEGIN
2 :n := 1;
3 END;
4 /
PL/SQL 过程已成功完成。
SQL> print n;
N
———-
1
PROMPT
显示文本
RECOVER
Performs media recovery on one or more tablespaces, one or
more datafiles, or the entire database.
REMARK
注释
REPFOOTER
设置报表结束符
REPHEADER
设置报表头
RUN
显示缓冲区SQL并执行
SAVE
保存缓冲区内容至文件
save test.sql
save test.sql [create]–如果文件已存在,提示文件已存在
save test.sql replace –如果文件已存在,则覆盖原文件
save test.sql append –如果文件已存在,则追加至原文件
SET
SET APPINFO{ON | OFF | text}
设置v$session中显示的module名
SQL> set appinfo 'from sqlplus'
SQL> run
1* select module from v$session
MODULE
————————————————
from sqlplus
SET ARRAYSIZE {15 | n}
设置SQLPLUS每次从数据库取得的数据行数,不会影响查询结果,增加这个值可以提高SQLPLUS查询数据的效率,
但会增加运行SQLPLUS的内存开销
SET AUTOCOMMIT{ON | OFF | IMMEDIATE | n}
设置n次DML操作之后自动提交
SET AUTOPRINT {ON | OFF}
设置自动显示PLSQL块和EXECUTE中的绑定变量
SQL> variable n number
SQL> begin
2 :n:=1;
3 end;
4 /
PL/SQL 过程已成功完成。
N
———-
1
SET AUTORECOVERY [ON | OFF]
设置使用RECOVER命令时是否采用交互模式
ON则使用默认的redo log文件,文件路径和文件名由LOG_ARCHIVE_DEST and LOG_ARCHIVE_FORMAT决定
OFF则采用交互模式
SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
设置每次执行自动显示执行计划
EXPLAIN:执行计划
STATISTICS:统计信息
SET BLOCKTERMINATOR {. | c | ON | OFF}
设置PLSQL块终止符
SET CMDSEP {; | c | ON | OFF}
设置多个SQLPLUS命令(不影响SQL)写在一行的分隔符
SQL> set cmdsep +;
SQL> show cmdsep
cmdsep "+" (hex 2b)
SQL> select * from dual;+ select * from dual;
D
-
X
SQL> show cmdsep+show cmdsep
cmdsep "+" (hex 2b)
cmdsep "+" (hex 2b)
SET COLSEP { | text} on
设置列间的分隔符
SQL> set colsep '|'
SQL> select * from mzh;
ID|NAME
———-|——————–
1|mzh
1|zhm
2|dd
2|ddd
2|dddf
3|dddf
4|rtt
已选择7行。
SET CONCAT [. | c | ON | OFF}
设置替代变量和字符串连接符号
SQL> show concat
concat "." (hex 2e)
SQL> set concat ,
SQL> show concat
concat "," (hex 2c)
SQL> select '&test,dd' from dual;
输入 test 的值: df
原值 1: select '&test,dd' from dual
新值 1: select 'dfdd' from dual
'DFD
----
dfdd
SET DEFINE {& | c | ON | OFF}
设置替代变量的指示符号
SQL> set define >
SQL> select '>test' from dual;
输入 test 的值: sdf
原值 1: select '>test' from dual
新值 1: select 'sdf' from dual
'SD
---
sdf
SET DESCRIBE [DEPTH {1 | n | ALL}] [LINENUM {ON | OFF}] [INDENT {ON | OFF}]
设置描述的显示层数[如包含自定义类型的表格]
1、创建一个Object Type
CREATE TYPE ADDRESS AS OBJECT
( STREET VARCHAR2(20),
CITY VARCHAR2(20)
);
/
2、创建引用这个对象类型的表
CREATE TABLE EMPLOYEE
(LAST_NAME VARCHAR2(30),
EMPADDR ADDRESS,
JOB_ID VARCHAR2(20),
SALARY NUMBER(7,2)
);
/
3、显示描述
SET DESCRIBE DEPTH 2 LINENUM ON INDENT ON
DESC EMPLOYEE
SQL> DESC EMPLOYEE
名称 是否为空? 类型
——————————- ——– ————————
1 LAST_NAME VARCHAR2(30)
2 EMPADDR ADDRESS
3 2 STREET VARCHAR2(20)
4 2 CITY VARCHAR2(20)
5 JOB_ID VARCHAR2(20)
6 SALARY NUMBER(7,2)
SET ECHO {ON | OFF} on
设置@, @@或者START之后是否显示执行的脚本内容
SET EDITFILE file_name[ .ext]
设置edit命令默认编辑的文件
SQL> show editfile
editfile "afiedt.buf"
SQL> set editfile sqlbuffer.buf
SQL> ed
SET EMBEDDED {ON | OFF}
SET ESCAPE {\ | c | ON | OFF}
设置转义字符
SQL> set escape $
SQL> ACCEPT v1 PROMPT 'Enter $&1:'
Enter &1:fewer
SQL> define v1
DEFINE V1 = "fewer" (CHAR)
SET FEEDBACK {6 | n | ON | OFF}
设置返回结果大于多少行时显示'已选择多少行'
SQL> select count(*) from mzh;
COUNT(*)
———-
118
SQL> set feedback 1
SQL> run
1* select count(*) from mzh
COUNT(*)
———-
118
已选择 1 行。
关闭回显
SQL> set feedback off
SQL> run
1* select count(*) from mzh
COUNT(*)
———-
118
SET FLAGGER {OFF | ENTRY | INTERMEDIATE | FULL}
设置SQL是否需要遵从ANSI/ISO SQL92标准
ANSI/ISO SQL92 standard.
SET FLUSH {ON | OFF}
ON设置关闭输出缓冲
OFF打开输出缓冲,可以提高性能
SET HEADING {ON | OFF}
设置是否显示列头
16:43:49 SQL> set heading off
16:52:46 SQL> select * from mzh;
1 wq
1 dq
1 fq
1 rq
2 qd
2 wd
2 sd
2 ad
已选择8行。
SET HEADSEP { | | c | ON | OFF}
只有在SET MARKUP HTML PREFORMAT模式下的iSQLPLUS下才能使用,用于指定列头的换行符
SET INSTANCE [instance_path | LOCAL]
设置连接的实例,必须首先断开连接才能设置
SET LINESIZE {80 | n}
设置SQLPLUS输出一行显示的列数
SET LOBOFFSET {n | 1}
设置CLOB和NLOB字符的截断位置,输出至截断位置
SET LOGSOURCE [pathname]
设置redo log的存放位置
SET LOGSOURCE "/usr/oracle10/dbs/arch"
RECOVER DATABASE
SET LONG {80 | n}
设置LONG, CLOB, NCLOB和XMLType 类型数据的显示字节数
SET LONGCHUNKSIZE {80 | n}
设置SQL*Plus获取LONG, CLOB, NCLOB 或者 XMLType 类型数据时的步长.
SET MARK[UP] HTML [ON | OFF] [HEAD text] [BODY text] [TABLE text] [ENTMAP
{ON | OFF}] [SPOOL {ON | OFF}] [PRE[FORMAT] {ON | OFF}]
用法同命令行参数-M
SET NEWPAGE {1 | n | NONE}
设置每页前显示多少行
SET NULL text on
替换查询结果中结果为空的值为text
SET NUMFORMAT format
设置数值类型默认显示格式
SQL> set numformat 99.99
SQL> run
1* select * from mzh
ID NAME
—— ——————–
1.00 mzh
1.00 zhm
2.00 dd
2.00 ddd
SET NUMWIDTH {10 | n}
SQL> set numwidth 2
SQL> select * from mzh;
ID NAME
— ——————–
1 mzh
1 zhm
2 dd
2 ddd
2 dddf
3 dddf
4 rtt
1 mzh
SET PAGESIZE {14 | n} on
设置每页显示的行数,0则关闭输出列头
SET PAUSE {ON | OFF | text}
ON:在每个PAGE输出时暂停并显示text文本
SQL> set pause 'loading'
SQL> set pause on;
SQL> select * from mzh;
loading
ID NAME
———- ——————–
1 mzh
1 zhm
2 dd
2 ddd
2 dddf
3 dddf
4 rtt
1 mzh
1 zhm
2 dd
2 ddd
loading
SET RECSEP {WRAPPED | EACH | OFF}
设置哪里输出记录分隔符
SQL> set recsep each
SQL> run
1* select * from mzh where rownum<4
ID NAME
———- ——————–
1 mzh
1 zhm
2 dd
SET RECSEPCHAR { | c}
设置指定记录分隔符
SQL> set recsep each
SQL> set recsepchar *
SQL> select * from mzh where rownum<4;
ID NAME
———- ——————–
1 mzh
********************************************************************************
1 zhm
********************************************************************************
2 dd
********************************************************************************
SET SERVEROUT[PUT] {ON | OFF} [SIZE {n | UNL[IMITED]}] [FOR[MAT] {WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]}]
设置DBMS_OUTPUT PUT_LINE是否可以输出
SIZE指定输出结果缓冲在数据库中的缓冲大小
SET SHIFTINOUT {VISIBLE | INVISIBLE}
设置是否显示shift字符
SET SHOWMODE {ON | OFF}
如果设置为ON,则使用SET命令改变SQLPLUS配置变量的时候将同时显示新值和旧值
SET SQLBLANKLINES {ON | OFF}
设置是否允许输入空行
ON:允许
OFF:不允许
SET SQLCASE {MIXED | LOWER | UPPER}
设置在执行SQL时将SQL文本转化为大写、小写还是不转化
SET SQLCONTINUE {> | text}
设置使用-换行之后显示的提示符
SET SQLNUMBER {ON | OFF}
ON在SQL分行显示的时候显示行号
OFF则显示提示符
SET SQLPLUSCOMPATIBILITY {x.y[.z]}
设置绑定变量输出格式兼容版本
SET SQLPREFIX {# | c}
指定在输入SQL和PLSQL时立即执行命令的前缀
SET SQLPROMPT {SQL> | text}
设置提示符
SET SQLTERMINATOR {; | c | ON | OFF}
设置SQL结束符,默认为;
SET SUFFIX {SQL | text}
设置默认的文件扩展名
SET TAB {ON | OFF}
将多个空格输出为单个空格
SET TERMOUT {ON | OFF}
设置@,@@,start执行脚本之后是否输出结果至屏幕
SET TIME {ON | OFF}
设置提示符前显示当前时间
SET TIMING {ON | OFF}
设置显示每条SQL语句的执行时间
SET TRIMOUT {ON | OFF}
设置是否输出行尾的空格,可以减少获取的数据量,提高效率
SET TRIMSPOOL {ON | OFF}
设置spool输出的每行结尾是否包含空格
SET UNDERLINE {- | c | ON | OFF}
只有在SET MARKUP HTML PREFORMAT模式下的iSQLPLUS中才能使用,用于设置列头的下划线符号
SET VERIFY {ON | OFF} on
控制是否回显经过替代变量替换之前和之后的SQL语句
SET WRAP {ON | OFF}
控制列超出是否截断。
SHOW
system_variable
ALL –显示SQLPLUS的所有配置变量
BTI[TLE] –显示BTITLE
ERR[ORS] [ { FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY | TRIGGER
| VIEW | TYPE | TYPE BODY | DIMENSION | JAVA CLASS } [schema.]name]
–显示编译错误
LNO –显示当前页的当前行
PARAMETERS [parameter_name]
PNO –当前页数
RECYC[LEBIN] [original_name]–显示当前用户的回收站信息
REL[EASE] –显示当前连接的数据库版本
REPF[OOTER]
REPH[EADER]
SGA –显示当前SGA情况
SPOO[L] –显示SPOOL状态
SQLCODE –显示最近的SQL操作的返回码
SQL> select * from fad;
select * from fad
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> show sqlcode
sqlcode 942
SQL> select * from dual;
D
-
X
SQL> show sqlcode
sqlcode 0
TTI[TLE]–显示TTITLE配置
USER –显示当前登入用户
XQUERY –显示XQUERY配置
SHUTDOWN
关闭当前数据库
SPOOL
指定显示结果保存至文件
spool test.sql
spool out/off
%