SQL*Plus是Oracle提供的访问数据库服务器的客户端软件,是Oracle的核心组件,也是Oracle DBA最常用的工具。
sqlplus 连接数据库的时候如果不写"@字符串"的话走的是ORACLE_SID路径,如果加上的话走的是TNSNAMES.ORA文件
C:\Users\Administrator>sqlplus /?
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 12月 17 14:36:43 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL*Plus: Release 11.2.0.1.0 Production
Copyright (c) 1982, 2010, Oracle. All rights reserved.
使用 SQL*Plus 执行 SQL, PL/SQL 和 SQL*Plus 语句。
用法 1: sqlplus -H | -V
-H 显示 SQL*Plus 版本和
用法帮助。
-V 显示 SQL*Plus 版本。
用法 2: sqlplus [ [] [{logon | /nolog}] [] ]
为: [-C ] [-L] [-M ""] [-R ] [-S]
-C 将受影响的命令的兼容性设置为
指定的版本。该版本具有
"x.y[.z]" 格式。例如, -C 10.2.0
-L 只尝试登录一次, 而不是
在出错时再次提示。
-M "" 设置输出的自动 HTML 标记。选项
的格式为:
HTML [ON|OFF] [HEAD text] [BODY text] [TABLE text]
[ENTMAP {ON|OFF}] [SPOOL {ON|OFF}] [PRE[FORMAT] {ON|OFF}]
-R 设置受限模式, 以禁用与文件系统交互的
SQL*Plus 命令。级别可以
是 1, 2 或 3。最高限制级别为 -R 3, 该级别
禁用与文件系统交互的
所有用户命令。
-S 设置无提示模式, 该模式隐藏
命令的 SQL*Plus 标帜, 提示和回显
的显示。
为: {[/][@] | / }
[AS {SYSDBA | SYSOPER | SYSASM}] [EDITION=value]
指定数据库帐户用户名, 口令和数据库连接
的连接标识符。如果没有连接
标识符, SQL*Plus 将连接到默认数据库。
AS SYSDBA, AS SYSOPER 和 AS SYSASM 选项是数据库
管理权限。
的形式可以是 Net 服务名
或轻松连接。
@[ | [//]Host[:Port]/]
是服务的简单名称, 它解析
为连接描述符。
示例: 使用 Net 服务名连接到数据库, 且
数据库 Net 服务名为 ORCL。
sqlplus myusername/mypassword@ORCL
Host 指定数据库服务器计算机的主机名或 IP
地址。
Port 指定数据库服务器上的监听端口。
指定要访问的数据库的
服务名。
示例: 使用轻松连接连接到数据库, 且
服务名为 ORCL。
sqlplus myusername/mypassword@Host/ORCL
/NOLOG 选项可启动 SQL*Plus 而不连接到
数据库。
EDITION 指定会话版本的值。
为: @|[.] [ ...]
使用将分配给脚本中的替代变量的指定参数
从 Web 服务器 (URL) 或本地文件系统 (filename.ext)
运行指定的 SQL*Plus 脚本。
在启动 SQL*Plus 并且执行 CONNECT 命令后, 将运行站点概要
文件 (例如, $ORACLE_HOME/sqlplus/admin/glogin.sql) 和用户概要文件
(例如, 工作目录中的 login.sql)。这些文件
包含 SQL*Plus 命令。
有关详细信息, 请参阅 SQL*Plus 用户指南和参考。
Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中,可以运行sql*plus命令与sql*plus语句。
我们通常所说的DML、DDL、DCL语句都是sql*plus语句,它们执行完后,都可以保存在一个被称为sql buffer的内存区域中,并且只能保存一条最近执行的sql语句,我们可以对保存在sql buffer中的sql 语句进行修改,然后再次执行,sql*plus一般都与数据库打交道。
除了sql*plus语句,在sql*plus中执行的其它语句我们称之为sql*plus命令。它们执行完后,不保存在sql buffer的内存区域中,它们一般用来对输出的结果进行格式化显示,以便于制作报表。
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.
脚本:@?/sqlplus/admin/help/hlpbld.sql helpus.sql
[ZFXDESKDB1:oracle]:/oracle>cd $ORACLE_HOME/sqlplus/admin/help
[ZFXDESKDB1:oracle]:/oracle/app/oracle/product/11.2.0/db/sqlplus/admin/help>l
total 168
-rw-r--r-- 1 oracle dba 265 Feb 16 2003 helpbld.sql
-rw-r--r-- 1 oracle dba 366 Jan 03 2011 helpdrop.sql
-rw-r--r-- 1 oracle dba 71817 Aug 16 2012 helpus.sql
-rw-r--r-- 1 oracle dba 2154 Jan 03 2011 hlpbld.sql
[ZFXDESKDB1:oracle]:/oracle/app/oracle/product/11.2.0/db/sqlplus/admin/help>more helpbld.sql
--
-- Copyright (c) Oracle Corporation 2003. All Rights Reserved.
--
-- NAME
-- helpbld.sql
--
-- DESCRIPTION
-- Invoke and execute the script to loads the SQL*Plus HELP system and
-- upon completion, exit the SQL*Plus connection
--
@@&1/hlpbld.sql &2
exit
[ZFXDESKDB1:oracle]:/oracle/app/oracle/product/11.2.0/db/sqlplus/admin/help>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Wed Jul 13 09:54:19 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SYS@omflhr> ? set
SP2-0171: HELP system not available.
SYS@omflhr> @?/sqlplus/admin/help/hlpbld.sql helpus.sql
PL/SQL procedure successfully completed.
Table created.
Grant succeeded.
。。。。。。。。。。。。。。。。。。。。。。。。。
Commit complete.
PL/SQL procedure successfully completed.
SYS@omflhr> ? set
SET
---
Sets a system variable to alter the SQL*Plus environment settings
for your current session. For example, to:
- set the display width for data
- customize HTML formatting
- enable or disable printing of column headings
- set the number of lines per page
SET system_variable value
where system_variable and value represent one of the following clauses:
APPI[NFO]{OFF|ON|text} NEWP[AGE] {1|n|NONE}
ARRAY[SIZE] {15|n} NULL text
AUTO[COMMIT] {OFF|ON|IMM[EDIATE]|n} NUMF[ORMAT] format
AUTOP[RINT] {OFF|ON} NUM[WIDTH] {10|n}
AUTORECOVERY {OFF|ON} PAGES[IZE] {14|n}
AUTOT[RACE] {OFF|ON|TRACE[ONLY]} PAU[SE] {OFF|ON|text}
[EXP[LAIN]] [STAT[ISTICS]] RECSEP {WR[APPED]|EA[CH]|OFF}
BLO[CKTERMINATOR] {.|c|ON|OFF} RECSEPCHAR {_|c}
CMDS[EP] {;|c|OFF|ON} SERVEROUT[PUT] {ON|OFF}
COLSEP {_|text} [SIZE {n | UNLIMITED}]
CON[CAT] {.|c|ON|OFF} [FOR[MAT] {WRA[PPED] |
COPYC[OMMIT] {0|n} WOR[D_WRAPPED] |
COPYTYPECHECK {ON|OFF} TRU[NCATED]}]
DEF[INE] {&|c|ON|OFF} SHIFT[INOUT] {VIS[IBLE] |
DESCRIBE [DEPTH {1|n|ALL}] INV[ISIBLE]}
[LINENUM {OFF|ON}] [INDENT {OFF|ON}] SHOW[MODE] {OFF|ON}
ECHO {OFF|ON} SQLBL[ANKLINES] {OFF|ON}
EDITF[ILE] file_name[.ext] SQLC[ASE] {MIX[ED] |
EMB[EDDED] {OFF|ON} LO[WER] | UP[PER]}
ERRORL[OGGING] {ON|OFF}SQLCO[NTINUE] {> | text}
[TABLE [schema.]tablename] SQLN[UMBER] {ON|OFF}
[TRUNCATE] [IDENTIFIER identifier] SQLPLUSCOMPAT[IBILITY] {x.y[.z]}
ESC[APE] {\|c|OFF|ON} SQLPRE[FIX] {#|c}
ESCCHAR {@|?|%|$|OFF} SQLP[ROMPT] {SQL>|text}
EXITC[OMMIT] {ON|OFF} SQLT[ERMINATOR] {;|c|ON|OFF}
FEED[BACK] {6|n|ON|OFF}SUF[FIX] {SQL|text}
FLAGGER {OFF|ENTRY|INTERMED[IATE]|FULL} TAB {ON|OFF}
FLU[SH] {ON|OFF} TERM[OUT] {ON|OFF}
HEA[DING] {ON|OFF} TI[ME] {OFF|ON}
HEADS[EP] {||c|ON|OFF} TIMI[NG] {OFF|ON}
INSTANCE [instance_path|LOCAL] TRIM[OUT] {ON|OFF}
LIN[ESIZE] {80|n} TRIMS[POOL] {OFF|ON}
LOBOF[FSET] {1|n} UND[ERLINE] {-|c|ON|OFF}
LOGSOURCE [pathname] VER[IFY] {ON|OFF}
LONG {80|n} WRA[P] {ON|OFF}
LONGC[HUNKSIZE] {80|n} XQUERY {BASEURI text|
MARK[UP] HTML [OFF|ON] ORDERING{UNORDERED|
[HEAD text] [BODY text] [TABLE text] ORDERED|DEFAULT}|
[ENTMAP {ON|OFF}] NODE{BYVALUE|BYREFERENCE|
[SPOOL {OFF|ON}] DEFAULT}|
[PRE[FORMAT] {OFF|ON}] CONTEXT text}
SYS@omflhr>
SYS@omflhr> ? index
Enter Help [topic] for help.
@ COPY PAUSE SHUTDOWN
@@ DEFINE PRINT SPOOL
/ DEL PROMPT SQLPLUS
ACCEPT DESCRIBE QUIT START
APPEND DISCONNECT RECOVERSTARTUP
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
SYS@omflhr>
SQL>start file_name
SQL>@ file_name
我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。
SQL>edit
SQL>/
SQL> SPOOL file_name
在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。
SQL> SPOOL OFF
只有关闭spool输出,才会在输出文件中看到输出的内容。
SQL> desc table_name
不退出sql*plus,在sql*plus中执行一个操作系统命令:
HOST
Sql> host hostname
该命令在windows下可能被支持。
在sql*plus中,切换到操作系统命令提示符下,运行操作系统命令后,可以再次切换回
Linux 下是:! 或者host
Windows 是:$ 或者host
sql>!
$hostname
$exit
sql>
概述:可以用来控制输出的各种格式,set show 如果希望永久的保存相关的设置,可以去修改 glogin.sql 脚本。
注意:这些设置的顺序不同,效果可能不同。
Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中,可以运行sql*plus命令与sql*plus语句。
我们通常所说的DML、DDL、DCL语句都是sql*plus语句,它们执行完后,都可以保存在一个被称为sql buffer的内存区域中,并且只能保存一条最近执行的sql语句,我们可以对保存在sql buffer中的sql 语句进行修改,然后再次执行,sql*plus一般都与数据库打交道。
除了sql*plus语句,在sql*plus中执行的其它语句我们称之为sql*plus命令。它们执行完后,不保存在sql buffer的内存区域中,它们一般用来对输出的结果进行格式化显示,以便于制作报表。
SQL> help set
SET
---
Sets a system variable to alter the SQL*Plus environment settings
for your current session. For example, to:
- set the display width for data
- customize HTML formatting
- enable or disable printing of column headings
- set the number of lines per page
In iSQL*Plus, you can also use the Preferences screen to set
system variables.
SET system_variable value
where system_variable and value represent one of the following clauses:
APPI[NFO]{OFF|ON|text} NUM[WIDTH] {10|n}
ARRAY[SIZE] {15|n} PAGES[IZE] {14|n}
AUTO[COMMIT] {OFF|ON|IMM[EDIATE]|n} PAU[SE] {OFF|ON|text}
AUTOP[RINT] {OFF|ON} RECSEP {WR[APPED]|EA[CH]|OFF}
AUTORECOVERY {OFF|ON} RECSEPCHAR {_|c}
AUTOT[RACE] {OFF|ON|TRACE[ONLY]} SERVEROUT[PUT] {ON|OFF}
[EXP[LAIN]] [STAT[ISTICS]] [SIZE {n | UNLIMITED}] [FOR[MAT]
BLO[CKTERMINATOR] {.|c|ON|OFF} {WRA[PPED] |
CMDS[EP] {;|c|OFF|ON} WOR[D_WRAPPED] |
COLSEP {_|text} TRU[NCATED]}]
CON[CAT] {.|c|ON|OFF} *SHIFT[INOUT] {VIS[IBLE] |
COPYC[OMMIT] {0|n} INV[ISIBLE]}
COPYTYPECHECK {ON|OFF}*SHOW[MODE] {OFF|ON}
DEF[INE] {&|c|ON|OFF} *SQLBL[ANKLINES] {OFF|ON}
DESCRIBE [DEPTH {1|n|ALL}] SQLC[ASE] {MIX[ED] |
[LINENUM {OFF|ON}] [INDENT {OFF|ON}] LO[WER] | UP[PER]}
ECHO {OFF|ON} *SQLCO[NTINUE] {> | text}
*EDITF[ILE] file_name[.ext] *SQLN[UMBER] {ON|OFF}
EMB[EDDED] {OFF|ON} SQLPLUSCOMPAT[IBILITY] {x.y[.z]}
ESC[APE] {/|c|OFF|ON} *SQLPRE[FIX] {#|c}
FEED[BACK] {6|n|ON|OFF} *SQLP[ROMPT] {SQL>|text}
FLAGGER {OFF|ENTRY|INTERMED[IATE]|FULL} SQLT[ERMINATOR] {;|c|ON|OFF}
*FLU[SH] {ON|OFF} *SUF[FIX] {SQL|text}
HEA[DING] {ON|OFF} *TAB {ON|OFF}
HEADS[EP] {||c|ON|OFF}*TERM[OUT] {ON|OFF}
INSTANCE [instance_path|LOCAL] *TI[ME] {OFF|ON}
LIN[ESIZE] {80|n} ({150|n} iSQL*Plus) TIMI[NG] {OFF|ON}
LOBOF[FSET] {1|n} *TRIM[OUT] {ON|OFF}
LOGSOURCE [pathname] *TRIMS[POOL] {OFF|ON}
LONG {80|n} UND[ERLINE] {-|c|ON|OFF}
LONGC[HUNKSIZE] {80|n} VER[IFY] {ON|OFF}
MARK[UP] HTML [OFF|ON] WRA[P] {ON|OFF}
[HEAD text] [BODY text] [TABLE text] XQUERY {BASEURI text|
[ENTMAP {ON|OFF}] ORDERING{UNORDERED|
[SPOOL {OFF|ON}] ORDERED|DEFAULT}|
[PRE[FORMAT] {OFF|ON}] NODE{BYVALUE|BYREFERENCE|
NEWP[AGE] {1|n|NONE} DEFAULT}|
NULL text CONTEXT text}
NUMF[ORMAT] format
An asterisk (*) indicates the SET option is not supported in iSQL*Plus.
pagesize
说明:设置每页显示的行数目,默认是 14,用法和 linesize 一样,至于其它环境参数的使用也是大同小异
例如:set pagesize 90
set pagesize 0; --设置每页显示的行数,缺省为24,为了避免分页,可设定为0,但不显示列标题
设置一页有多少行数
SQL> SET PAGES[IZE] {24|n}
如果设为0,则所有的输出内容为一页并且不显示列标题 ,取值范围为 (自 0 至 50000)
set colsep ' '; --域输出分隔符,默认为空格
set trimout on; --去除标准输出每行的拖尾空格,缺省为off ,也可以set trim on;
set trimspool on; --去除重定向(spool)输出每行的拖尾空格,on 去除 off 不去除,缺省为off(不去字段空格),也可以为 set trims on;
SET NEWPAGE NONE; --默认为1,设置页与页之间的分隔
SQL> SET NEWP[AGE] {1|n|NONE}
当set newpage 0 时,会在每页的开头有一个小的黑方框。
当set newpage n 时,会在页和页之间隔着n个空行。
当set newpage none 时,会在页和页之间没有任何间隔。
set verify off; --是否显示替代变量被替代前后的语句,默认开启
set verify on/off
当在sqlplus中运行的sql语句中有替代变量(以&或&&打头)的时候,
set verify(或ver) on/off可以设置是否显示替代变量被替代前后的语句。
如:
SQL> set ver on;
SQL> select * from dual where 1=&var;
Enter value for var: 1
old 1: select * from dual where 1=&var
new 1: select * from dual where 1=1
DU
--
X
而如果设为off,则显示如下:
SQL> set ver off;
SQL> select * from dual where 1=&var;
Enter value for var: 1
DU
--
X
使用以&和&&开头的替代变量的前提是set define on;(不过这是缺省状态)。
SET SPACE 0;--默认为1
set echo on:显示文件中的每条命令及其执行结果;
set echo off:不显示文件中的命令,只显示其执行结果。
set echo off; --显示start启动的脚本中的每个sql命令,缺省为on,是否显示执行的命令内容
在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句
SQL> SET ECHO {ON|OFF}
有三种方式:
set feedback on
set feedback off
set feedback n
默认的当一条sql发出的时候,oracle会给一个反馈,比如说创建表的时候,如果成功,命令行会返回类似:Table created的反馈,又比如执行一个pl/sql成功的时候,命令行会返回:PL/SQL procedure successfully completed 。当载脚本中运行很多语句的时候,一般将feedback设为off。
set feedback n:当一条sql语句返回n或者大于n行记录的时候,就会有feedback,比如:set feedback 5,当返回记录等于或多于5行的时候会有类似8 rows selected.的反馈.如果返回行少于5则没有此反馈。
set feedback off; --显示本次sql命令处理的记录条数,缺省为on,也可以 SET FEED OFF; 即是否显示如下内容:* rows selected
是否显示当前sql语句查询或修改的行数
SQL> SET FEED[BACK] {6|n|ON|OFF}
默认只有结果大于6行时才显示结果的行数。如果set feedback 1 ,则不管查询到多少行都返回。当为off 时,一律不显示查询的行数
回显本次sql命令处理的记录条数,缺省为on
SQL> select * from test where id = 1;
NAME ID
---------- ----------
a 1
b 1
已选择2行。
SQL> set feedback off;
SQL> /
NAME ID
---------- ----------
a 1
b 1
SQL> set feedback on;
SQL> /
NAME ID
---------- ----------
a 1
b 1
已选择2行。
有两种形式:
set termout on
set termout off
当设置为set termout off的时候就会忽略sql语句的输出如果这条sql是在脚本中运行的话。也就是说如果命令不在脚本中运行,即使设置为set termout off,仍然会返回sql的结果。
term命令:
当和SPOOL命令联合使用时,可以取消SQLPLUS输出,查询结果仅仅存在于假脱机文件中
set term on:查询结果既显示于假脱机文件中,又在SQLPLUS中显示;
set term off:查询结果仅仅显示于假脱机文件中。
set termout off; --显示脚本中的命令的执行结果,缺省为on ,SET TERM OFF ;注意:这个尤为重要,可以设置需要显示和不需要显示的内容,本人深受其害
是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。
SQL> SET TERM[OUT] {ON|OFF}
在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。
有两种形式:
set heading on
set heading off
Setting the heading specifies whether column headings (names) are printed or not.
设置为set heading off的时候不显示列标题。
set heading off; --输出域标题,缺省为on,即是否显示字段名称
是否显示列标题
SQL> SET HEA[DING] {ON|OFF}
当set heading off 时,在每页的上面不显示列标题,而是以空白行代替
SET LINESIZE 1000 ;--设置行的宽度,默认80,设置查询返回的纪录每行的宽度,超过这个宽度则会换行显示,(注意,这个问题本人曾经碰到过,花了一个上午的时间才找到原因所在)这个显然不是我们想要的结果,不够这个宽度则补空格,范围为自 1 至 32767, linesize
说明:设置显示行的宽度,默认是 80 个字符,使用 show linesize 显示
例如:set linesize 90
注:LINESIZE要稍微设置大些,免得数据被截断,它应和相应的TRIMSPOOL结合使用防止导出的文本有太多的尾部空格。但是如果LINESIZE设置太大,会大大降低导出的速度,另外在WINDOWS下导出最好不要用PLSQL导出,速度比较慢,直接用COMMEND下的SQLPLUS命令最小化窗口执行。
设置一行可以容纳的字符数
SQL> SET LIN[ESIZE] {80|n}
如果一行的输出内容大于设置的一行可容纳的字符数,则折行显示。
12.1. 设置当前session是否对修改的数据进行自动提交
SQL>SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n}
显示时,用text值代替NULL值
SQL> SET NULL text
是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。
SQL> SET SERVEROUT[PUT] {ON|OFF}
在编写存储过程时,我们有时会用dbms_output.put_line将必要的信息输出,以便对存储过程进行调试,只有将serveroutput变量设为on后,信息才能显示在屏幕上。 dbms_output.put_line会"吃掉"最前面的空格?
在set serveroutput on后加上format wrapped参数!
一、 Oracle中参数 serveroutput永久设置方法
serveroutput 是sqlplus的配置参数,而不是数据库的配置参数,修改并保存sqlplus的配置参数,那么每次打开sqlplus时就不用重新设置了。
设置方法如下:
1. sql> set serveroutput on
然后,在sqlplus中
2. sql> store set $ORACLE_HOME/sqlplus/admin/glogin.sql replace
完成保存设置.
可以通过如下查看设置效果:
SQL> show serveroutput;
serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
说明设置成功。
如果输出内容过多报错:
ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
可以设置成最大值,最大值为100W:
set serveroutput on size 1000000;
当SQL语句的长度大于LINESIZE时,是否在显示时截取SQL语句。
SQL> SET WRA[P] {ON|OFF}
当输出的行的长度大于设置的行的长度时(用set linesize n命令设置),当set wrap on时,输出行的多于的字符会另起一行显示,否则,会将输出行的多于字符切除,不予显示。
Sql*plus中, 不允许sql语句中间有空行, 这在从其它地方拷贝脚本到sql*plus中执行时很麻烦. 原因是sqlplus遇到空行就认为是语句结束了.
其实要改变这种现象, 只要使用SQLBLANKLINES参数就可以了
SET SQLBLANKLINES ON
例如:
原脚本:
DROP TABLE tmp_ONT_LHR;
CREATE TABLE tmp_ONT_LHR NOLOGGING
as
SELECT qy.name qy,
jz.name jz,
u.name,
u.id,
u.vendorid,
u.netypeid,
U.createdate,
u.servicestatus,
w.code port_code,
w.id port_id,
W.SERVICESTATUS port_SERVICESTATUS,
w.metacategory port_metacategory
FROM xb_port w,
xb_managedelement u,
xb_location qy,
xb_location jz
WHERE w.meid = u.id
AND u.managementareaid = qy.id
AND u.siteid = jz.id
AND u.metacategory = 'com.gxlu.ngrm.equipment.ONT'
AND w.code IN ('LAN3', 'LAN4')
AND qy.metacategory = 'com.gxlu.ngrm.area.ManagementArea'
AND JZ.METACATEGORY = 'com.gxlu.ngrm.area.Site'
;
执行如下,报错了:
C:\Users\Administrator>sqlplus telant/test@sdh_cq_test @f:\sql\test\ont.sql
SQL*Plus: Release 11.2.0.1.0 Production on 星期五 5月 11 16:12:51 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> DROP TABLE tmp_ONT_LHR;
DROP TABLE tmp_ONT_LHR
*
第 1 行出现错误:
ORA-00942: table or view does not exist
SQL> CREATE TABLE tmp_ONT_LHR NOLOGGING
2 as
3 SELECT qy.name qy,
4 jz.name jz,
5 u.name,
6 u.id,
7 u.vendorid,
8 u.netypeid,
9 U.createdate,
10 u.servicestatus,
11 w.code port_code,
12 w.id port_id,
13 W.SERVICESTATUS port_SERVICESTATUS,
14 w.metacategory port_metacategory
15
SQL> FROM xb_port w,
SP2-0734: 未知的命令开头 "FROM xb_..." - 忽略了剩余的行。
SQL> xb_managedelement u,
SP2-0734: 未知的命令开头 "xb_managed..." - 忽略了剩余的行。
SQL> xb_location qy,
SP2-0734: 未知的命令开头 "xb_locatio..." - 忽略了剩余的行。
SQL> xb_location jz
SP2-0734: 未知的命令开头 "xb_locatio..." - 忽略了剩余的行。
SP2-0044: 要获取已知命令的列表, 请输入 HELP;
输入 EXIT 可退出。
SQL> WHERE w.meid = u.id
SP2-0734: 未知的命令开头 "WHERE w.m..." - 忽略了剩余的行。
SQL> AND u.managementareaid = qy.id
SP2-0734: 未知的命令开头 "AND u.m..." - 忽略了剩余的行。
SQL> AND u.siteid = jz.id
SP2-0734: 未知的命令开头 "AND u.s..." - 忽略了剩余的行。
SQL> AND u.metacategory = 'com.gxlu.ngrm.equipment.ONT'
SP2-0734: 未知的命令开头 "AND u.m..." - 忽略了剩余的行。
SP2-0044: 要获取已知命令的列表, 请输入 HELP;
输入 EXIT 可退出。
SQL> AND w.code IN ('LAN3', 'LAN4')
SP2-0734: 未知的命令开头 "AND w.c..." - 忽略了剩余的行。
SQL> AND qy.metacategory = 'com.gxlu.ngrm.area.ManagementArea'
SP2-0734: 未知的命令开头 "AND qy...." - 忽略了剩余的行。
SQL> AND JZ.METACATEGORY = 'com.gxlu.ngrm.area.Site'
SP2-0734: 未知的命令开头 "AND JZ...." - 忽略了剩余的行。
SQL> ;
SQL> set timing on
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
已用时间: 00: 00: 00.00
SQL> set time on;
11:35:42 SQL> select * from t;
未选定行
已用时间: 00: 00: 00.34
11:36:26 SQL>
set numwidth 38
set long 999999 //显示不完整
SET LONG {80 | n}
设置LONG, CLOB, NCLOB和XMLType 类型数据的显示字节数
SET LONGCHUNKSIZE {80 | n}
设置SQL*Plus获取LONG, CLOB, NCLOB 或者 XMLType 类型数据时的步长.
昨天使用dbms_sqltune.report_sql_monitor,发现仅仅显示一段,显示不全.
SQL> select /*+ monitor */ count(*) from dept;
COUNT(*)
----------
4
SQL> select dbms_sqltune.report_sql_monitor from dual;
REPORT_SQL_MONITOR
--------------------------------------------------------------------------------
SQL Monitoring Report
SQL Text
------------------------------
select /*+ monitor */
看一下dbms_sqltune.report_sql_monitor的返回类型clob,可以猜到long设置太小.
SQL> show long longc
long 80
longchunksize 80
修改glogin.sql 文件,没有仔细思考加入,也就是设置long=1G,longchunksize=1G
set long 10000000
set longchunksize 10000
结果灾难出现,
select dbms_sqltune.report_sql_monitor from dual;
很久都没有出来.
查看文档:
SET LONGCHUNKSIZE
SET LONGCHUNKSIZE sets the size of the increments SQL*Plus uses to retrieve a CLOB, LONG, NCLOB or XMLType value.
Experiment with different sizes if LONGS or LOBs are being fetched.
SET LONG {80 | n}
Sets maximum width (in bytes) for displaying CLOB, LONG, NCLOB and XMLType values; and for copying LONG values.
The maximum value of n is 2,000,000,000 bytes.
测试一下,long是显示lob的大小,而LONGCHUNKSIZE是每次提取的大小,如果设置过大,导致OS使用swap.设置如下:
set long 10000000
set longchunksize 102400
在执行一些正常了!
语法:
SET MARK[UP] HTML [ON | OFF] [HEAD text] [BODY text] [TABLE text] [ENTMAP {ON | OFF}] [SPOOL {ON | OFF}] [PRE[FORMAT] {ON | OFF}]
SET MARKUP指明SQL*Plus输出HTML编码格式,必须使用SET MARKUP HTML ON SPOOL ON和SQL*Plus SPOOL命令去创建一个spool文件,并且以HTML格式输出。
SET MARKUP习惯称作SQLPLUS -MARKUP命令。
使用SQLPLUS -MARKUP HTML ON或者SQLPLUS -MARKUP HTML ON SPOOL ON 产生标准的web页,SQL*Plus 自动生成完整的用和标签封装HTML网页。 当设定SPOOL OFF或者退出SQL*Plus是,spool文件中的HTML标签就闭合。
SQLPLUS -MARKUP和一些其他有用的静默和限制命令一起用。
使用MARKUP HTML ON生成HTML输出,无论是
标签还是一个HTML表格。输出一个表格使用标准的HTML ,和
标签,自动闭合从一个查询返回结果集的行和列。当设置HTML ON时,默认产生标准HTML表格。通过设置PREFORMAT ON产生预格式化HTML 标签。 用SHOW MARKUP命令查看MARKUP操作当前状态: SQL> show markup markup HTML OFF HEAD " body {font:10pt Arial,Helvetica,sans-serif; color:black; background:White;}
HTML [ON|OFF] 指定是否生成HTML格式,ON生成,OFF不生成,默认是OFF。
HEAD text 指定HTML中HEAD标签中的内容,默认情况下,文本包括级联样式和标题。
BODY text 指定HTML中BODY标签属性
TABLE text 设置
ENTMAP {ON|OFF} 指定在SQL * Plus中是否用HTML字符实体如, " and &等替换特殊字符, " and & 。默认设置是ON。例如: SQL> set markup html on entmap off SQL>
SQL> set markup html on entmap on
SQL>
SQL>
SPOOL {ON|OFF} 指定是否在SQL*Plus生成HTML标签 和 , 和 。默认是OFF。 注: 这是一个后台打印操作,只有在生成SPOOL文件生效,在屏幕上并不生效。
PRE[FORMAT] {ON|OFF} 指定SQL*Plus生成HTML时输出 标签还是HTML表格,默认是OFF,因此默认输出是写HTML表格。 1.1.3.23 set editfile "afiedt.buf"经常在工作中使用sqlplus,会在一些目录下留下afiedt.buf文件.
当然可以使用find命令找到并且清除它.
简单的方法就是在glogin.sql加入如下:
set editfile /tmp/afiedt.sql
这样在edit调用vim编辑时,可以利用vim的syntax高亮度显示sql的功能.
Cannot create save file "afiedt.buf" OracleSQL 在使用sqlplus的时候遇到了这个问题,记录以下解决方法,在glogin.sql中加入以下代码: 1 define _editor='vi' 2 set editfile /home/oracle/afiedt.buf 语句的编辑: (1)SQL> edit (默认的缓存文件 afiedt.buf) (2)SQL> set editfile afiedt.sql (修改的缓存文件 afiedt.sql) SQL> edit 或者 SQL> edit afiedt.sql (3)SQL> define DEFINE _EDITOR = 'Notepad' (CHAR) (默认的编辑器) SQL> define _editor = 'PLSQLDev' SQL> define DEFINE _EDITOR = 'PLSQLDev' (CHAR) (修改的编辑器) 1.1.3.24 set pause
pause {off(默认值)|on|text} 在显示报表时 控制终端滚动.在每一暂停时 必须按return键.on将引起sqlplus在每一报表输出页开始时暂停.所指定的文本是每一次sqlplus暂停时显示的文本.如果要键入多个词 必须用单引号将文本括起来. 例:
C:\Users\Administrator>sqlplus telant/telant@sdh_cq_nm
SQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 9 18:58:43 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> set pause on SQL> set pause 'more ...' SQL> select table_name from user_tables; more ...
TABLE_NAME ------------------------------------------------------------ SYS_EXPORT_SCHEMA_19 XB_CARD_DELETE YQ_OLT_GIS LIJIA_CRM_TELANT_CODE_20120830 AAQ_W ROUTE_TT CROSS_TT XB_SHELFTYPE_CHG ZDW_BEIFEN_1129_2 WFW_DELE_CODESEG WFW_ONT_HELP more ...
TABLE_NAME ------------------------------------------------------------ XB_MIGRATIONRANGEDETAIL_BK TEMP_ONU_LIST ZDW_BEIFEN_0914_1 LIJIA_CRM_ALL QQ_WW XR_PRODINSRESSERVINSASSOC_BK DEL_CDSLH_DZ XR_PRODINSRESSERVINSASSOC_BK1 XB_PIRELATION_LHR YQ_PROD_SYNC_GIS ZDW_BEIFEN_1015_3 more ... 1.1.3.25 set definedefine {& |c|off|on(默认值)} define {& |c|off|on(默认值)} 设置在替换变量时所使用的字符.on或off控制sqlplus是否扫描替换变量的命令及用他们的值代替. define的on或off的设置控制scan变量的设置.
1:define(即host变量) Host变量主要作用是起到一个替代变量的作用,是主机环境可以和oracle进行交互的一个媒介 通过define定义host变量的时候必须指定变量名和变量的值,如果变量名已经存在于host变量中,则自动覆盖,这个值不可以指定类型,一律按char存储。 定义的格式是:define variable_name = value(必须定义的时候就赋值,否则define variable_name是显示已经存在的host变量值,不存在会报告未定义。) 另外可以使用define命令显示单个(define variable_name,不能显示多个)或全部(define)的host变量的值和类型(类型都是char)。 使用 首先要了解host变量只是在当前session环境中有效。了解对于host变量启用和关闭的命令是:set define on和set define off。这在sqlplus和plsql developer的command window中都可以使用,在sql或plsql中引用host变量,使用&符号,只是做一个简单的替换动作,比如 define x=TEST Select * from ‘&x’;那么会报表找不到的错误,因为x被替换为test,那么’TEST’表是不存在的,TEST表存在,多了个单引号。 也可以不定义,直接在sql或plsql中在字符串前面加&符号,会提示你输入变量的值,然后替换。这种情况下是临时的变量,define命令查不到。 ※经常使用host变量的场合是在写脚本的时候,脚本的有些地方经常变化,其他地方固定,那么可以使用&引用。 2,Variable(即绑定变量) 定义: 绑定变量主要是在sql中使用,达到sql解析一次,执行多次,从而提高效率的目的。绑定变量和host变量一样,也有定义的,也有临时性的。(临时性的在动态sql或动态plsql中通过占位符和using使用),其他的如sql会自动使用绑定变量的情况,此处不专门讨论。定义的绑定变量也是在当前session中有效。 Sqlplus中可以使用大于等于3个字符表示一个命令,这里我们用var,var命令是声明一个绑定变量,只能给予名称和类型,定义的时候不能赋值,赋值可以在plsql中或者采用函数赋值(而host变量定义的时候必须赋值)。 Var var_name type 声明一个指定类型的绑定变量,类型上面列表中已经列出。 对于var或var var_name只是显示所有的绑定变量或者指定名称的绑定变量的name和type,不显示其值,显示其值用print命令,可以采用help print查看。 Print是输出所有绑定变量的值,print name1 name2 ….是输出指定的绑定变量的值,多个用空格分割。对于host变量的define要么输出全部,要么输出单个,没有指定数目的。Print后面的绑定变量名也可以加前缀冒号,效果一样。 例: 使用: 1. 绑定变量在sql和plsql中直接引用必须加前缀 :。如要引用绑定变量a,则是 :a。 2. 在真正运行的PLSQL程序中,比如自动运行,有自己的一套机制。 3. 初始化和应用绑定变量,初始化定义的绑定变量,可以使用过程和函数,其中过程可以内部给绑定变量赋值、也可以参数是绑定变量,参数模式为out返回。使用函数和过程差不多,还可以使用call 函数来赋值,另外还可以使用SQLPLUS中的execute命令直接赋值,多个绑定变量用分号隔开。 4. 注意NULL值不可赋值给绑定变量,这在NDS中也成立。 使用过程和sqlplus命令初始化绑定变量: WORKGROUP\DINGJUN-PC>begin 2 :a := 1; 3 end; 4 / PL/SQL 过程已成功完成。 WORKGROUP\DINGJUN-PC>print a A -------------------------------------- 1 WORKGROUP\DINGJUN-PC>select :a from dual; :A --------------------------------------- 1 ###使用execute初始化,初始化多个用分号隔开 SQL> var x number; SQL> var y number; SQL> exec :x :=1; :y :=2; PL/SQL procedure successfully completed x --------- 1 y --------- 2 下面看下NULL值赋值给绑定变量,会报错 WORKGROUP\DINGJUN-PC>exec :a:='aa',:b:=null; BEGIN :a:='aa',:b:=null; END; 再如下面的例子,使用过程返回绑定变量,定义一个Var x number; WORKGROUP\DINGJUN-PC>var x number; WORKGROUP\DINGJUN-PC>Create or replace procedure pt( m out number) 2 As 3 Begin 4 m:=10; 5 End; 6 / 过程已创建。 WORKGROUP\DINGJUN-PC>exec pt(m =>:x); PL/SQL 过程已成功完成。 WORKGROUP\DINGJUN-PC>print x X ------------------------- 10 绑定变量是REFCURSOR类型。一个参数使用ref cursor,通过绑定变量类型定义为REFCURSOR,然后传入过程,打印绑定变量(效果和查询语句一样)。 WORKGROUP\DINGJUN-PC>var x refcursor; WORKGROUP\DINGJUN-PC>create or replace procedure pt(cur out SYS_REFCURSOR) 2 AS 3 BEGIN 4 OPEN cur for select * from test where rownum<3; 5 END; 6 / 过程已创建。 WORKGROUP\DINGJUN-PC>exec pt(cur =>:x); PL/SQL 过程已成功完成。 WORKGROUP\DINGJUN-PC>print x SJ ID ---- ---------- 01 1 02 2 由上面可以知道,print可以直接把refcursor的结果打印出来,不需要迭代查找。 下面看看如何用函数初始化定义的绑定变量: WORKGROUP\DINGJUN-PC>create or replace function concatestring(a in varchar2, b in varchar2) return varchar2 2 as 3 c varchar2(100); 4 begin 5 c := a||b; 6 return c; 7 end; 8 / 函数已创建。 WORKGROUP\DINGJUN-PC>variable x varchar2(10); WORKGROUP\DINGJUN-PC>call concatestring('a','b') into :x; 调用完成。 WORKGROUP\DINGJUN-PC>print x X ---------------------------------------------------------------- ab 当然也可以将函数的参数定义为out模式来初始化,我们这里使用call命令调用函数把结果传给绑定变量,调用格式为:call function(参数列表) into :绑定变量。 pl/sql中的参数和定义的变量(包括全局变量和临时变量)都会内部转为绑定变量,所以尽量在pl/sql中尽量使用静态sql,而不要使用动态sql,如果使用动态sql,要尽量加上绑定变量。 绑定变量的基本作用 绑定变量主要是sql的执行过程中,在解析sql之后会进行共享池(SGA)的检查,看优化器有没有分析优化过这个sql,环境必须完全一致才可以(包括大小写的一致,session情况一致等)。那么可以达到一次分析,多次执行的目的,这就是软解析,否则要进过解析,优化,行资源生成等一系列sql执行的过程,因为sql优化需要耗费很多资源,如果硬解析,sql性能会下降。 看SGA中的sql是否是软解析被调用多次,可以查看v$sql或v$sqlarea视图,查看列sql_text,executions,如: select sql_text,executions from v$sql where sql_text like '%trademark%'; SQL_TEXT EXECUTIONS select * from trademark where id=:tid 6 1、Oracle默认开启的服务 OracleDBConsoleorcl OracleVssWriterORCL OracleMTSRecoveryService OracleOraDb11g_home1TNSListener OracleServiceORCL 2、SQL *PLUS命令 HELP [topic]:查看命令的使用方法 HOST:使用该命令可以从SQL*PLUS环境切换到操作系统环境,使用EXIT命令重新返回SQL*PLUS HOST 操作系统命令:执行操作系统命令 CLEAR SCR[EEN]:清除屏幕内容 SHOW ALL:查看SQL*PLUS的所有系统变量值信息 SHOW USER:显示当前哪个用户在使用SQL*PLUS SHOW SGA:显示SGA大小 SHOW REL[EASE]:显示数据库版本信息 SHOW ERRORS:显示详细的错误信息 SHOW PARAMETERS:查看系统初始化参数信息 DESC[RIBE]:查看对象结构 3、SQL*PLUS语句 A[PPEND] text:将text附加到当前行之后 C[HANGE] /old/new:将当前行中的old替换为new C[HANGE] /text/:删除当前行中指定的text文本 C[LEAR] BUFF[ER]:清除缓存区中的所有行 I[NPUT]:插入不定数量的命令行 I[NPUT] text:插入指定的文本text DEL:删除当前行 DEL n:删除第n行,行号从1开始 DEL m n:删除第m行到第n行之间的命令行 L[IST]:列出缓冲区中的所有行 L[IST] n:列出第n行 R[UN]或/:显示缓冲区中保存的语句,并运行这些语句 n:将第n行作为当前行 n text:使用text代替第n行信息 0 text:在第一行之前插入text文本 4、保存缓冲区和读取文件到缓冲区 保存:save filename 读取:get filename list|nolist 5、使用START命令读取并运行文件内容 start { url | filename } 6、使用EDIT命令编辑缓冲区内容或文件内容 ED[IT] [ filename ] 7、使用SPOOL命令复制输出结果到文件 SPO[OL] [ filename [ CRE[ATE] | REP[LACE] | APP[END] ] | OFF | OUT ] 8、使用临时变量 使用&符号表示临时变量,多次出现需要多次输入 使用&&符号表示临时变量,重复出现,不需要重复输入 使用SET VERIFY [ ON | OFF ]来指定是否输出原值和新值信息(须在执行SQL语句之前执行) 使用SET DEFINE 来指定一个除字符&之外的字符,作为定义变量的字符 在脚本文件中使用临时变量 9、如果文件夹名称中含有空格,需要用引号将@命令之后的内容包围起来 10、使用已定义的变量 已定义的变量是指具有明确定义的变量,该变量的值会一直保留到显式的被删除、重定义或者退出SQL*PLUS为止 1、DEFINE命令:定义变量 DEFINE:查询所有已定义的变量 DEFINE ariable:显示指定变量的名称、值和类型 DEFINE ariable = value:创建一个char类型的用户变量、并且为该变量赋初始值 2、UNDEFINE:删除变量 3、ACCEPT命令:定义变量,并且定制一个用户提示,用于提示用户输入指定变量的数据 accept variable [ data_type ] [ format format ] [ default default ] [ prompt text | noprompt ] [ hide] 11、格式化查询结果:格式化命令设置后,该命令一直起作用,直到会话结束或者下一个格式化命令的设置,每一次报表结束之后,重新设置SQL*PLUS的默认值,如果为某个列指定了别名,那么必须引用该别名,而不能使用列名
在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析. 一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和cpu的数量来解决。之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。当一个sql语句提交后,oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。 而唯一使得oracle 能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样。 1. sqlplus中如何使用绑定变量,可以通过variable来定义
[c-sharp]view plaincopyprint? select * from tt where id=1; 2 3 ID NAME 4 ---------- ---------------------------------------- 5 1 test 6 7 SQL> select * from tt where id=2; 8 9 ID NAME 10 ---------- ---------------------------------------- 11 2 test 12 13 SQL> variable i number; 14 SQL> exec :i :=1; 15 16 PL/SQL 过程已成功完成。 17 18 SQL> select *from tt where id=:i; 19 20 ID NAME 21 ---------- ---------------------------------------- 22 1 test 23 24 SQL> exec :i :=2; 25 26 PL/SQL 过程已成功完成。 27 28 SQL> select *from tt where id=:i; 29 30 ID NAME 31 ---------- ---------------------------------------- 32 2 test 33 34 SQL> print i; 35 36 I 37 ---------- 38 2 39 40 SQL> select sql_text,parse_calls from v$sql where sql_text like 'select * from t 41 t where id=%'; 42 43 SQL_TEXT PARSE_CALLS 44 ------------------------------------------------------------ ----------- 45 select * from tt where id=2 1 46 select * from tt where id=1 1 47 select * from tt where id=:i 2 48 SQL> 从上面试验发现绑定变量i的使用使查询id=1和id=2的sqlselect *from tt where id=:i得以重复 使用,从而避免了hard parse,这里的PARSE_CALLS=2包括了一次soft parse 2. 前两天看到有人在pub上问在sqlplus中通过define和variable定义的变量的区别。其实define定义的我 理解不是变量而是字符常量,通过define定义之后,在通过&或者&&引用的时候不需要输入了,仅此而已。 oracle在执行的时候自动用值进行了替换;而variable定义的是绑定变量,上面已经提到。 [c-sharp]view plaincopyprint? 49 C:>sqlplus xys/manager 50 SQL*Plus: Release 11.1.0.6.0 - Production on 星期二 4月 1 14:03:00 2008 51 Copyright (c) 1982, 2007, Oracle. All rights reserved. 52 53 连接到: 54 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production 55 With the Partitioning, OLAP, Data Mining and Real Application Testing options 56 SQL> define 57 DEFINE _DATE = "01-4月 -08" (CHAR) 58 DEFINE _CONNECT_IDENTIFIER = "db11" (CHAR) 59 DEFINE _USER = "XYS" (CHAR) 60 DEFINE _PRIVILEGE = "" (CHAR) 61 DEFINE _SQLPLUS_RELEASE = "1101000600" (CHAR) 62 DEFINE _EDITOR = "Notepad" (CHAR) 63 DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.1.0. 64 6.0 - Production 65 With the Partitioning, OLAP, Data Mining and Real Application Testing options" ( 66 CHAR) 67 DEFINE _O_RELEASE = "1101000600" (CHAR) 68 SQL> select *from tt; 69 ID NAME 70 ---------- ---------- 71 1 a 72 2 a 73 3 "abc" 74 SQL> define a 75 SP2-0135: 符号 a 未定义 76 SQL> define a=1 77 SQL> define 78 DEFINE _DATE = "01-4月 -08" (CHAR) 79 DEFINE _CONNECT_IDENTIFIER = "db11" (CHAR) 80 DEFINE _USER = "XYS" (CHAR) 81 DEFINE _PRIVILEGE = "" (CHAR) 82 DEFINE _SQLPLUS_RELEASE = "1101000600" (CHAR) 83 DEFINE _EDITOR = "Notepad" (CHAR) 84 DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.1.0. 85 6.0 - Production 86 With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR) 87 DEFINE _O_RELEASE = "1101000600" (CHAR) 88 DEFINE A = "1" (CHAR) 89 --通过上面显示define定义的应该是字符(串)常量。 90 SQL> select * from tt where id=&a; 91 原值 1: select * from tt where id=&a 92 新值 1: select * from tt where id=1 93 ID NAME 94 ---------- ---------- 95 1 a 96 SQL> select * from tt where id=&&a; 97 原值 1: select * from tt where id=&&a 98 新值 1: select * from tt where id=1 99 ID NAME 100 ---------- ---------- 101 1 a 102 SQL> define b='a'; 103 SQL> define 104 DEFINE _DATE = "01-4月 -08" (CHAR) 105 DEFINE _CONNECT_IDENTIFIER = "db11" (CHAR) 106 DEFINE _USER = "XYS" (CHAR) 107 DEFINE _PRIVILEGE = "" (CHAR) 108 DEFINE _SQLPLUS_RELEASE = "1101000600" (CHAR) 109 DEFINE _EDITOR = "Notepad" (CHAR) 110 DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.1.0. 111 6.0 - Production 112 With the Partitioning, OLAP, Data Mining and Real Application Testing options" ( 113 CHAR) 114 DEFINE _O_RELEASE = "1101000600" (CHAR) 115 DEFINE A = "1" (CHAR) 116 DEFINE B = "a" (CHAR) 117 118 --如果是字符类型那么在引用时别忘了加上单引号,另外通过define定义之后在引用时不需要输入了。 119 SQL> select * from tt where name=&&b; 120 原值 1: select * from tt where name=&&b 121 新值 1: select * from tt where name=a 122 select * from tt where name=a 123 * 124 第 1 行出现错误: 125 ORA-00904: "A": 标识符无效 126 127 SQL> select * from tt where name='&&b'; 128 原值 1: select * from tt where name='&&b' 129 新值 1: select * from tt where name='a' 130 ID NAME 131 ---------- ---------- 132 1 a 133 2 a 134 SQL> select * from tt where name='&b'; 135 原值 1: select * from tt where name='&b' 136 新值 1: select * from tt where name='a' 137 ID NAME 138 ---------- ---------- 139 1 a 140 2 a 141 --执行sql时进行了替换 142 SQL> select sql_text from v$sql where sql_text like 'select * from tt where name 143 =%'; 144 SQL_TEXT 145 -------------------------------------------------------------------------------- 146 select * from tt where name=1 147 select * from tt where name='a' 148 SQL>
3. oracle在解析sql时会把plsql中定义的变量转为为绑定变量
[c-sharp]view plaincopyprint? 149 SQL> create table tt(id int , name varchar2(10)); 150 151 表已创建。 152 153 SQL> alter session set sql_trace=true; 154 155 会话已更改。 156 157 SQL> declare 158 2 begin 159 3 for i in 1..100 loop 160 4 insert into tt values(i,'test'); 161 5 end loop; 162 6 commit; 163 7 end; 164 8 / 165 166 PL/SQL 过程已成功完成。 167 168 SQL> alter session set sql_trace=false; 169 --trace file: 170 ===================== 171 PARSING IN CURSOR #3 len=90 dep=0 uid=31 oct=47 lid=31 tim=7109565004 hv=962259239 172 173 ad='668ec528' 174 declare 175 begin 176 for i in 1..100 loop 177 insert into tt values(i,'test'); 178 end loop; 179 commit; 180 end; 181 END OF STMT 182 PARSE #3:c=15625,e=5678,p=0,cr=3,cu=0,mis=1,r=0,dep=0,og=1,tim=7109564996 183 ===================== 184 PARSING IN CURSOR #5 len=34 dep=1 uid=31 oct=2 lid=31 tim=7109565520 hv=1299226876 185 186 ad='66869934' 187 INSERT INTO TT VALUES(:B1 ,'test') 188 END OF STMT 189 PARSE #5:c=0,e=226,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,tim=7109565513 190 ===================== 另外从hard parse的数据量上其实也可以大致猜测oracle会把plsql中定义的变量转换为绑定变量处理 [c-sharp]view plaincopyprint? 191 SQL> connect /as sysdba 192 已连接。 193 SQL> shutdown immediate 194 数据库已经关闭。 195 已经卸载数据库。 196 ORACLE 例程已经关闭。 197 SQL> startup 198 ORACLE 例程已经启动。 199 200 Total System Global Area 167772160 bytes 201 Fixed Size 1247900 bytes 202 Variable Size 67110244 bytes 203 Database Buffers 96468992 bytes 204 Redo Buffers 2945024 bytes 205 数据库装载完毕。 206 数据库已经打开。 207 SQL> connect xys/manager 208 已连接。 209 SQL> drop table tt; 210 211 表已删除。 212 213 SQL> create table tt(id int , name varchar2(10)); 214 215 表已创建。 216 SQL> col name format a30 217 SQL> select a.*,b.name 218 2 from v$sesstat a , v$statname b 219 3 where a.statistic#=b.statistic# 220 4 and a.sid=(select distinct sid from v$mystat) 221 5 and b.name like '%parse%'; 222 223 SID STATISTIC# VALUE NAME 224 ---------- ---------- ---------- ------------------------------ 225 159 328 39 parse time cpu 226 159 329 74 parse time elapsed 227 159 330 339 parse count (total) 228 159 331 165 parse count (hard) 229 159 332 0 parse count (failures) 230 231 SQL> declare 232 2 begin 233 3 for i in 1..100 loop 234 4 insert into tt values(i,'test'); 235 5 end loop; 236 6 commit; 237 7 end; 238 8 / 239 240 PL/SQL 过程已成功完成。 241 242 SQL> select a.*,b.name 243 2 from v$sesstat a , v$statname b 244 3 where a.statistic#=b.statistic# 245 4 and a.sid=(select distinct sid from v$mystat) 246 5 and b.name like '%parse%' 247 6 / 248 249 SID STATISTIC# VALUE NAME 250 ---------- ---------- ---------- ------------------------------ 251 159 328 39 parse time cpu 252 159 329 74 parse time elapsed 253 159 330 345 parse count (total) 254 159 331 167 parse count (hard) 255 159 332 0 parse count (failures) 256 257 SQL>
这里发现hard parse只增加了2,如果没有使用绑定变量的话,相信hard parse会更多 4. 过程中的参数会自动转化为绑定变量
[c-sharp]view plaincopyprint? 258 SQL> edit 259 已写入 file afiedt.buf 260 261 1 create or replace procedure proc_test(p_id int, p_name varchar2) 262 2 is 263 3 begin 264 4 insert into tt values(p_id , p_name); 265 5 commit; 266 6* end; 267 SQL> / 268 269 过程已创建。 270 271 SQL> alter session set sql_trace=true; 272 273 会话已更改。 274 275 SQL> exec proc_test(200,'test'); 276 277 PL/SQL 过程已成功完成。 278 279 SQL> alter session set sql_trace=false; 280 281 会话已更改。 282 --trace file: 283 alter session set sql_trace=true 284 END OF STMT 285 EXEC #3:c=0,e=749,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=7393908487 286 ===================== 287 PARSING IN CURSOR #1 len=35 dep=0 uid=31 oct=47 lid=31 tim=7403000735 hv=526484776 288 289 ad='6687b0b8' 290 BEGIN proc_test(200,'test'); END; 291 END OF STMT 292 PARSE #1:c=0,e=2584,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=7403000727 293 ===================== 294 PARSING IN CURSOR #6 len=33 dep=1 uid=31 oct=2 lid=31 tim=7403001293 hv=2874748229 295 296 ad='668e9cd8' 297 INSERT INTO TT VALUES(:B2 , :B1 ) 298 END OF STMT 299 PARSE #6:c=0,e=246,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,tim=7403001286 300 =====================
另外也可以直观的观察: [c-sharp]view plaincopyprint? 301 SQL> exec proc_test(200,'test'); 302 303 PL/SQL 过程已成功完成。 304 305 SQL> select sql_text from v$sql where sql_text like '%proc_test%'; 306 307 SQL_TEXT 308 -------------------------------------------------------------------------------- 309 BEGIN proc_test(200,'test'); END; 310 311 SQL>
在sqlplus里执行过程不能观察出来 下面在plsql developer执行一次过程之后再来看执行的情况 [c-sharp]view plaincopyprint? 312 SQL> select sql_text from v$sql where sql_text like '%proc_test%'; 313 314 SQL_TEXT 315 -------------------------------------------------------------------------------- 316 begin -- Call the procedure proc_test(p_id =>:p_id, p_name =>:p_name); end; 317 318 SQL>
很显然oracle在执行过程时把参数转化为绑定变量了,其实从plsql developer中执行过程时的语法就能 看出来: [c-sharp]view plaincopyprint? 319 begin 320 -- Call the procedure 321 proc_test(p_id => :p_id, 322 p_name => :p_name); 323 end; 在输入参数列表框上面的执行语法就是这样的。 5. 在动态sql中使用绑定变量,动态sql中使用绑定变量非常明显也容易理解,下面给出2个简单的例子 [c-sharp]view plaincopyprint? 324 SQL> set serveroutput on 325 SQL> declare 326 2 v_string varchar2(100); 327 3 v_id tt.id%type ; 328 4 v_name tt.name%type ; 329 5 begin 330 6 v_string:='select * from tt where id=:v_id'; 331 7 execute immediate v_string into v_id , v_name using &a; 332 8 dbms_output.put_line(v_id||' '||v_name) ; 333 9 end; 334 10 / 335 输入 a 的值: 1 336 原值 7: execute immediate v_string into v_id , v_name using &a; 337 新值 7: execute immediate v_string into v_id , v_name using 1; 338 1 test 339 340 PL/SQL 过程已成功完成。 341 342 SQL> declare 343 2 v_string varchar2(100); 344 3 v_id tt.id%type; 345 4 v_name tt.name%type ; 346 5 begin 347 6 v_string:='insert into tt values(:id,:name)'; 348 7 execute immediate v_string using &id,&name ; 349 8 end; 350 9 / 351 输入 id 的值: 1000 352 输入 name 的值: 'test' 353 原值 7: execute immediate v_string using &id,&name ; 354 新值 7: execute immediate v_string using 1000,'test' ; 355 356 PL/SQL 过程已成功完成。 357 358 SQL> select * from tt where id=1000; 359 360 ID NAME 361 ---------- ---------- 362 1000 test 363 364 SQL>
=============================下面加上一些其他变量的使用方法========================= eg001(&替换变量)
[c-sharp]view plaincopyprint? 365 SQL> select xh,xm from system.xs where zym='&zym'; 366 输入 zym 的值: 计算机 367 原值 1: select xh,xm from system.xs where zym='&zym' 368 新值 1: select xh,xm from system.xs where zym='计算机' 369 370 XH XM 371 ------ -------- 372 061101 王林 373 061102 程明 374 061103 王燕 375 061104 韦严平 376 061106 李方方 377 061107 李明 378 061108 林一帆 379 061109 张强民 380 061110 张蔚 381 061111 赵琳 382 061113 严红 383 384 已选择11行。 385 386 SQL> edit 387 已写入 file afiedt.buf 388 389 1 select xh 学号,xm 姓名,avg(cj) as 平均成绩 390 2* from system.xs_xkb group by xh,xm 391 SQL> / 392 393 学号 姓名 平均成绩 394 ------ -------- ---------- 395 061103 王燕 71 396 061210 李红庆 76 397 061110 张蔚 91.3333333 398 061220 吴薇华 82 399 061104 韦严平 79.6666667 400 061101 王林 78 401 061204 马林林 91 402 061106 李方方 72 403 061218 孙研 70 404 061102 程明 78 405 061241 罗林琳 90 406 407 学号 姓名 平均成绩 408 ------ -------- ---------- 409 061111 赵琳 80.5 410 061109 张强民 76.5 411 061216 孙祥欣 81 412 061221 刘燕敏 79 413 414 已选择15行。 415 416 SQL> select * from system.xs_xkb where cj>=&cj; /*替换变量可以使用WHERE子句;ORDER BY子句;列表达式;表名;整个SELECT语句*/ 417 输入 cj 的值: 90 418 原值 1: select * from system.xs_xkb where cj>=&cj 419 新值 1: select * from system.xs_xkb where cj>=90 420 421 SQL> select xs.xh,&name,kcm,&column 422 2 from system.xs,&kc,system.xs_kc 423 3 where xs.xh=xs_kc.xh and &condition 424 4 and kcm=&kcm 425 5 order by & column; 426 输入 name 的值: xm 427 输入 column 的值: cj 428 原值 1: select xs.xh,&name,kcm,&column 429 新值 1: select xs.xh,xm,kcm,cj 430 输入 kc 的值: system.kc 431 原值 2: from system.xs,&kc,system.xs_kc 432 新值 2: from system.xs,system.kc,system.xs_kc 433 输入 condition 的值: kc.kch=xs_kc.kch 434 原值 3: where xs.xh=xs_kc.xh and &condition 435 新值 3: where xs.xh=xs_kc.xh and kc.kch=xs_kc.kch 436 输入 kcm 的值: '离散数学' 437 原值 4: and kcm=&kcm 438 新值 4: and kcm='离散数学' 439 输入 column 的值: cj 440 原值 5: order by & column 441 新值 5: order by cj 442 443 XH XM KCM CJ 444 ------ -------- ---------------- ---------- 445 061104 韦严平 离散数学 65 446 061109 张强民 离散数学 70 447 061101 王林 离散数学 76 448 061102 程明 离散数学 78 449 061106 李方方 离散数学 80 450 061103 王燕 离散数学 81 451 061110 张蔚 离散数学 89
eg002(&&替换变量)
[c-sharp]view plaincopyprint? 452 --&&替换变量系统一直用同一个值处理,清除用undefine 变量名清除 453 SQL> edit 454 已写入 file afiedt.buf 455 456 1 select xs.xh,&name,kcm,&&column /*清除替换变量(undefine column)*/ 457 2 from system.xs,&kc,system.xs_kc 458 3 where xs.xh=xs_kc.xh and &condition 459 4 and kcm=&kcm 460 5* order by &column 461 SQL> / 462 输入 name 的值: xm 463 输入 column 的值: cj 464 原值 1: select xs.xh,&name,kcm,&&column 465 新值 1: select xs.xh,xm,kcm,cj 466 输入 kc 的值: system.kc 467 原值 2: from system.xs,&kc,system.xs_kc 468 新值 2: from system.xs,system.kc,system.xs_kc 469 输入 condition 的值: kc.kch=xs_kc.kch 470 原值 3: where xs.xh=xs_kc.xh and &condition 471 新值 3: where xs.xh=xs_kc.xh and kc.kch=xs_kc.kch 472 输入 kcm 的值: '离散数学' 473 原值 4: and kcm=&kcm 474 新值 4: and kcm='离散数学' 475 原值 5: order by &column /*使用&&替换变量的好处,相同变量只输第一次就OK*/ 476 新值 5: order by cj 477 478 XH XM KCM CJ 479 ------ -------- ---------------- ---------- 480 061104 韦严平 离散数学 65 481 061109 张强民 离散数学 70 482 061101 王林 离散数学 76 483 061102 程明 离散数学 78 484 061106 李方方 离散数学 80 485 061103 王燕 离散数学 81 486 061110 张蔚 离散数学 89 487 488 已选择7行。
eg003
DEFINE[variable[=value]] UNDEFINE清除定义的变量 [c-sharp]view plaincopyprint? 489 SQL> define specialty=通信工程 490 SQL> define specialty 491 DEFINE SPECIALTY = "通信工程" (CHAR) 492 SQL> select xh,xm,xb,cssj,zxf from system.xs 493 2 where zym='&specialty'; 494 495 XH XM XB CSSJZXF 496 ------ -------- -- -------------- ---------- 497 061202 王林 男 29-10月-85 40 498 061210 李红庆 女 01-5月 -85 44 499 061201 王敏 男 10-6月 -84 42 500 061203 王玉民 男 26-3月 -86 42 501 061204 马林林 女 10-2月 -84 42 502 061206 李计 女 20-9月 -85 42 503 061216 孙祥欣 女 09-3月 -84 42 504 061218 孙研 男 09-10月-86 42 505 061220 吴薇华 女 18-3月 -86 42 506 061221 刘燕敏 女 12-11月-85 42 507 061241 罗林琳 女 30-1月 -86 50 508 509 已选择11行。
eg004 ACCEPT variable[datatype[NUMBER|CHAR|DATE]][FORMAT format][PROMPT text][HIDE]/*variable:指定接收值的变量。该名称的变量不存在,那么SQL重建该变量;datatype:变量数据类型,默认为CHAR*/ [c-sharp]view plaincopyprint? 510 SQL> accept num prompt'请输入课程号:' 511 请输入课程号:101 512 SQL> set verify on 513 SQL> 514 1 select xh,kcm,cj from system.xs_kc,system.kc 515 2 where xs_kc.kch=kc.kch and kc.kch='&num' 516 3* order by cj 517 SQL> / 518 原值 2: where xs_kc.kch=kc.kch and kc.kch='&num' 519 新值 2: where xs_kc.kch=kc.kch and kc.kch='101' 520 521 XH KCM CJ 522 ------ ---------------- ---------- 523 061103 计算机基础 62 524 061106 计算机基础 65 525 061218 计算机基础 70 526 061210 计算机基础 76 527 061221 计算机基础 79 528 061101 计算机基础 80 529 061216 计算机基础 81 530 061220 计算机基础 82 531 061241 计算机基础 90 532 061104 计算机基础 90 533 061111 计算机基础 91 534 535 XH KCM CJ 536 ------ ---------------- ---------- 537 061204 计算机基础 91 538 061110 计算机基础 95 539 540 已选择13行。 541 542 SQL>
1.1.3.26 undefine105.用于清除替代变量的定义 undefine variable ... 1.1.3.27 修改命令提示符
glogin.sql是SQL*Plus全局登录的的配置文件,是Oracle自带的登录脚本文件,它的路径是固定的,即$ORACLE_HOME/sqlplus/admin。当用户启动SQL*Plus的时候,会从这个固定的路径加载glogin.sql。 可以在glogin.sql文件中添加如下的内容: SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER> " 这样,每次登录SQL*Plus的时候,SQL提示符就会变为设置的内容,假设用户为SYS,数据库为lhrdb,则提示符如下所示: SQL> SHOW SQLPROMPT sqlprompt "SQL> " SQL> SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER> " SYS@lhrdb> SYS@lhrdb> SHOW SQLPROMPT sqlprompt "_user'@'_connect_identifier> " 注意,以上提示符的“>”后有一个空格。
1.1.3.28 其它其中系统变量及其可选值如下: arraysize {20(默认值)|n} autocommit {off(默认值)|on|immediate} blockterminator {.(默认值)|c} cmdsep { |c|off(默认值)|on} compatibility {v5|v6|v7|native(默认值)} concat {.(默认值)|c|off|on(默认值)} copycommit {0(默认值)|n} crt crt echo {off|on} embedded {off(默认值)|on} escape {\(默认值)|c|off(默认值)|on} feedback {6(默认值)|n|off|on} flush {off|on(默认值)} heading {off|on(默认值)} headsep {|(默认值)|c|off|on(默认值)} linesize {80(默认值)|n} long {80(默认值)|n} longchunksize {80(默认值)|n} maxdata n newpage {1(默认值)|n} null text numformat 格式 numwidth {10(默认值)|n} pagesize {14(默认值)|n} pause {off(默认值)|on|text} recsep {wrapped(默认值)|each|off} recsepchar { |c} scan {off|on(默认值)} serveroutput {off|on} size n showmode {off(默认值)|on} space {1(默认值)|n} sqlcase {mixed(默认值)|lower|upper} sqlcontinue {> (默认值)|文本} sqlnumber {off|on(默认值)} sqlperfix {#(默认值)|c} sqlprompt {sql> (默认值)|文本} sqlterminator { (默认值)|c|off|on(默认值)} suffix {sql(默认值)|文本} tab{off|on(默认值)} termout {off|on(默认值)} time {off(默认值)|on} timing {off(默认值)|on} trimout {off|on(默认值)} underline {-(默认值)|c|off|on(默认值)} verify {off|on(默认值)} wrap {off|on(默认值)} 系统变量说明: arraysize {20(默认值)|n} 置一批的行数 是sqlplus一次从数据库获取的行数 有效值为1至5000. 大的值可提高查询和子查询的有效性 可获取许多行 但也需要更多的内存.当超过1000时 其效果不大. autocommit {off(默认值)|on|immediate} 控制oracle对数据库的修改的提交. 置on时 在oracle执行每个sql命令或pl/sql块后对数据库提交修改 置off时则制止自动提交 需要手工地提交修改 例如用sql的commit命令. immediate功能同on. blockterminator {.(默认值)|c} 置非字母数字字符 用于结束pl/sql块.要执行块时 必须发出run命令或/命令. cmdsep { |c|off(默认值)|on} 置非字母数字字符 用于分隔在一行中输入的多个sql/plus命令.on或off控制在一行中是否能输入多个命令. on时将自动地将命令分隔符设为分号(.其中c表示所置字符. compatibility {v5|v6|v7|native(默认值)} 指定当前所链接的oracle版本.如果当前oracle的版本为5 则置compatibility为v5 为版本6时置成v6 为版本7时置成v7. 如果希望由数据库决定该设置 在置成native. concat {.(默认值)|c|off|on(默认值)}设置结束一替换变量引用的字符.在中止替换变量引用字符之后可跟所有字符 作为体会组成部分 否则sqlplus将解释为替换变量名的一部分.当concat开关为on时 sqlplus可重置concat的值为点(.). copycommit {0(默认值)|n} 控制copy命令提交对数据库修改的批数.每次拷贝n批后 将提交到目标数据库.有效值为0到5000. 可用变量arraysize设置一批的大小.如果置copycommit为0 则仅在copy操作结束时执行一次提交. crt crt 改变sqlplus runform命令使用的缺省crt文件.如果置crt不包含什么 则crt仅包含' ' ' ' .如果在一个form的系统调用期间 要使用new.crt(缺省crt是old.crt) 可按下列形式调用form: sql> runform -c new form名 或者 sql> set crt new sql> runform form名 第二中方法存储crt选择 以致在下次运行runform命令(是在同一次sqlplus交互中)时 不需要指定. echo {off|on} 控制start命令是否列出命令文件中的每一命令.为on时 列出命令 为off时 制止列清单. embedded {off(默认值)|on} 控制每一报表在一页中开始的地方. 为off时 迫使每一报表是在新页的顶部开始 为on时 运行一报表在一页的任何位置开始. escape {\(默认值)|c|off(默认值)|on} 定义作为escape字符的字符.为off时 使escape字符不起作用.为on时 使escape字符起作用. feedback {6(默认值)|n|off|on} 显示由查询返回的记录数.on和off置显示为开或关.置feedback为on时 等价于置n为1. 如果置feedback为0 等价于将它置成off. flush {off|on(默认值)} 控制输出送至用户的显示设备.为off时 运行操作系统做缓冲区输出 为on时 不允许缓冲. 仅当非交互方式运行命令文件时使用off 这样可减少程序i/o总是 从而改进性能. heading {off|on(默认值)} 控制报表中列标题的打印.为on时 在报表中打印列标题 为off时禁止打印列标题. headsep {|(默认值)|c|off|on(默认值)} 定义标题分隔字符.可在column命令中使用标题分隔符 将列标题分成多行.on和off将标题分隔置成开或关.当标题分隔为关(off)时 sqlplus打印标题分隔符像任何字符一样. linesize {80(默认值)|n} 置sqlplus在一行中显示的字符总数 它还控制在ttitle和btitle中对准中心的文本和右对齐文本. 可定义linesize为1至最大值 其最大值依赖于操作系统. long {80(默认值)|n} 为显示和拷贝long类型值的最大宽度的设置. 对于oracle7 n的最大值为2g字节 对于版本6 最大值为32767. longchunksize {80(默认值)|n} 为sqlplus检索long类型值的增量大小.由于内存的限制 可按增量检索 该变量仅应用于oracle7. maxdata n 置sqlplus可处理的最大行宽字符数 其缺省值和最大值在不同操作系统中是可变的. newpage {1(默认值)|n} 置每一页的头和顶部标题之间要打印的空行数.如果为0 在页之间送一换号符 并在许多终端上清屏. null text 设置表示空值(null)的文本 如果null没有文本 则显示空格(缺省时). 使用column命令中的null子句可控制null变量对该列的设置. numformat 格式 设置显示数值的缺省格式 该格式是数值格式. numwidth {10(默认值)|n} 对显示数值设置缺省宽度. pagesize {14(默认值)|n} 置从顶部标题至页结束之间的行数.在11英寸长的纸上打印报表 其值为54 上下各留一英寸(newpage值为6). recsep {wrapped(默认值)|each|off} recsepchar { |c} 指定显示或打印记录分行符的条件.一个记录分行符 是由recsepchar指定的字符组成的单行.空格为recsepchar的默认字符. recsep告诉sqlplus在哪儿做记录分隔.例如将recsep置成wrapped 在每一缠绕行之后 打印记录分行符.如果将recsep置成each sqlplus在每一行后打印一记录分行符.如果将recsep置成off sqlplus不打印分行符. scan {off|on(默认值)} 控制对存在的替换变量和值的扫描.off禁止替换变量和值的处理 on则允许正常处理. serveroutput {off|on} size n 控制在sqlplus中的存储过程是否显示输出.off时为禁止 on时则显示输出. size设置缓冲输出的字节数 缺省值为2000 n不能小于2000或大于一百万. showmode {off(默认值)|on} 控制sqlplus在执行set命令时是否列出其新老值old或new的设置. space {1(默认值)|n} 设置输出列之间空格的数目 其最大值为10. sqlcase {mixed(默认值)|lower|upper} 先于执行之前 将sql命令和pl/sql块的大小写进行转换. sqlplus将转换命令中的全部文本 包括带引号的直接量和标示符.sqlcase不改变sql缓冲区本身. sqlcontinue {> (默认值)|文本} 在一附加行上继续一sqlplus命令时 sqlplus以该设置的字符序列进行提示. sqlnumber {off|on(默认值)} 为sql命令和pl/sql块的第二行和后继行设置提示.为on时 提示行号 为off时 提示设置为sqlprompt的值. sqlperfix {#(默认值)|c} 设置sqlplus前缀字符.在键入一sql命令或pl/sql块时 可在单独行上键入一sqlplus命令 由sqlplus的前缀字符做前缀. sqlplus直接执行该命令 不影响sql命令或pl/sql块.前缀字符必须是非字母数字字符. sqlprompt {sql> (默认值)|文本} 设置sqlplus的命令提示符. sqlterminator { (默认值)|c|off|on(默认值)} 设置用于结束和执行sql命令的字符. off意味着sqlplus不识别命令终止符 用键入空行来结束sql命令. on重设置终止符为默认的分号(. suffix {sql(默认值)|文本} 设置缺省文件的后缀 sqlplus在命令中使用 来引用命令文件. suffix不控制输出(spool)文件的扩展名. tab {off|on(默认值)} 决定sqlplus在终端输出中如何格式化空白空间. 为off时 在输出中使用空格格式化空白空间 为on时 用tab字符. tab的缺省值依赖于系统 用show tab命令可查看该缺省值. termout {off|on(默认值)} 控制由文件执行命令所产生的输出的显示. off禁止显示 以致从一个命令文件假脱机输出 在屏幕上看不到输出. on时显示输出. termout off 不影响交互地进行命令的输出. time {off(默认值)|on} 控制当前日期的显示. on时 在每条命令提示前显示当前时间 off时禁止时间的显示. timing {off(默认值)|on} 控制时间统计的显示. on时 显示每一个运行的sql命令或pl/sql块的时间统计 off时 禁止每一个命令的时间统计. trimout {off|on(默认值)} 决定sqlplus在每一显示行的末端是否允许带空格. on时将每行尾部的空格去了 特别当从慢速的通信设备存取sqlplus时可改进性能 off时允许sqlplus显示尾部的空格.trimout on 不影响假脱机输出. 设置tab on时 sqlplus忽略trimout on. underline {-(默认值)|c|off|on(默认值)} 设置用在sqlplus报表中下划线列标题的字符. on或off将下划线置成开或关. verify {off|on(默认值)} 控制sqlplus用值替换前、后是否列出命令的文本. on时显示文本 off时禁止列清单. wrap {off|on(默认值)} 控制sqlplus是否截断数据项的显示. off时截断数据项 on时允许数据项缠绕到下一行. 在column命令中使用wrapped和truncated子句可控制对指定列的wrap的设置.
1.@ @[url|file_name] [arg]
2.@@ (类似@ 用法主要为在脚本文件中嵌套调用其他脚本文件)
3./ 用于执行 select * from emp . /
4.accept (用于将输出值存储到替代变量) acc variable ----->用于指定变量 [num char date binary_float binary_double ]---->类型 for|format ---->输出格式 default|def ------>默认 prompt text | noprompt [hide] ----->指定提示文本 或 无提示默认 或者隐藏 accept hired date format 'dd-mm-yyyy' format '输入日期:' accept pswd char format '口令: ' hide accept ename char format 'A20' prompt 'name: ' name: hello
5.append 用于在SQL缓冲区的当前尾部添加内容 A[ppend]
6.archivelog archie log {list | stop} | {start | next | all | integer} [to destination] start -->用于激活自动归档 next -->用于手工归档尚未归档的下一个日志组
7.attribute attribute [type_name.attribut_name [all[as] alias clear]] for[mat] format like {type_name.attribute_name | alias} on|off]] type_name对象类型名,attribut_name对象书属性名,alias指定别名,format指定列显示格式,like用于复制另一属性的显示特征,on|off用于控制列的显示特征状态
attr employee_type.last_name format a20
8.break (参考) 此命令用于禁止显示重复行,并且将显示结果分隔为几个部分 bre(ak) [on report_element [action [action]]] .... report_element {column|expr|row|report} action {ski[p]n|ski[n]|page} {nodup|licates|dup[licates]} SQL> break on deptno skip 1 SQL> set pagesize 40 SQL> select deptno,ename,sal from emp order by deptno;
DEPTNO ENAME SAL ---------- ---------- ---------- 10 CLARK 2450 KING 5000 MILLER 1300
20 JONES 2975 FORD 3000 ADAMS 1100 SMITH 800 SCOTT 3000 9.btitle 用于指定报表页底部标题 btitle [printspec [text|variable]..] | [on | off btitle 'page end' select ename,sal,hiredate from emp where empno=7788;
10.change c[hange] sepchar ole [sepchar [new [sepchar]]] 用于修改SQL缓冲区当前行的内容
11.clear 用于复位或者删除特定选项的当前值或者设置 cl[ear] bre[aks] | buff[er] | col[umns] | comp[utes] | scr[een] | sql timi[ng] SQL> cle bre breaks cleared
12.col column [column |expr ] {option} clear entmap(on|off) fold_after fold_before format heading text {right|left|center} like{expr|alias}
col ename heading 'name' format a10 col sal heading 'sal' formate l9999.99
13.compute 与break 结合可用于输出小计行 comp [function [label] text] .. of [expr| column| alias] ..on [expr|column |alias | report|row ]..] break on deptno skip 2 compute sum label 'total' of sal on deptno
14.connect connect scott/tiger@test connect sys/oracel@test as sysdba
16.del 该命令用于删除SQL缓冲区一行或多行 del [n | n m |n *| n last| * | * n|* last| last] n 到 m n 到 *当前 n 到 last 最后一行 * 当前行 * 当前 到 n 行 last 最后一行
17.describe desc {[schema.]object[@db_link]}
18.disconnect 断开连接会话但不退出sqlplus
19.edit 用于编辑SQL缓冲区或SQL脚本的内容 ed /u../1.txt
20.execute 用于执行单个PL/SQL语句 exec dbms_output.put_line('hello')
21.exit exit {success|failure|warning} | n | variable | :bindvariable {rollback | commit}
22.get 将OS文件内容装载到SQL缓冲区 get /u../d1.sql
23.help help | ? [topic] 该命令用于显示命令帮助信息 ? copy
25.input 用于在SQL缓冲区的当前行后增加一行或者多行 i(put) where deptno=10
26.list [n | n m |n *| n last| * | * n|* last| last] 用于列出SQL缓冲区的内容
27.n 定位SQL缓冲区的当前行
28.passwd
29.pause 该命令用于指定暂停执行 pause [text] ----->text 用于指定暂停等待要显示的文本 set pause off pause adjust paper and press return to continue.
30.print [variable ..] print no
31.prompt 该命令用于指定显示信息 prompt [text] prompt '按回车键继续'
32.remark 用于在脚本中开始注释
33.repfooter 该命令用于设置报表脚注 repfooter [page] [printspec [text | variable]..] [on | off] printspec :col ns[kip] [n]tab nleft center right bold format text
34.repheader repheader [page] [printspec [text | variable]..] [on | off] printspec :col ns[kip] [n]tab nleft center right bold format text
repfooter page center 'employee listing report '
35.run 运行并列出缓冲区的内容
36.save 将缓冲区内容保存到sql脚本 save file filename create replace append
37.set appinfo {on | off | text} set appi on show appinfo 该命令用于设置是否通过dbms_application_info包自动注册脚本
38.set array[size] {n} show array set arraysize 25 该命令用于设置数组提取尺寸
39.set auto[commit] {on|off|immediate| n} 该命令用于设置是否自动提交DML语句,默认为 OFF
40.set autoprint {on|off} 该命令用于设置是否自动输出邦定变量值
41.set autorecovery on|off 该命令用于设置恢复时是否自动应用归档日志
42.set autotrace {on|off|traceonly} {explain|statistics} 用于设置是否激活自动跟踪, 只跟踪不显示语句结果 只显示执行计划 只显示执行统计 SQL> set autot traceonly stat SQL> select * from scott.emp;
43.set blo[ckterminator] {.|c|on|off} 该命令用于设置 plsql会的结束符
44.set cmds[ep] {;|c|on|off} 用于设置多个sql*plus 命令之间的分隔符 ttitle left 'salaries' + clear column
45.set colsep [ |text] SQL> set colsep | SQL> show colsep colsep "|" SQL> select sal,ename from scott.emp where empno=7788;
salaries SAL|ENAME ----------|---------- 3000|SCOTT
46.set con[cat] {.|c|on|off} 该命令用于设置终止替代变量引用的字符
47.set copy {0,n} 该命令设置在执行copy时 提交改变到数据库的行数
48.set copytypecheck {on|off} 用于设置在执行copy命令时是否禁止数据类型比较
50.set describe [depth {1 n all }] [linenum on off ] [ indent on off] 该命令用于设置描述对象的深度级别
51.set echo {on off} 该命令用于控制是否激活echo命令
52.set editfile file_name 该命令用于设置edit 命令的 默认文件名
53.set embedded on|off 该命令用于控制报表开始在页的何处
54.set error {on off} [table tablename] [truncate] [identifier identifier] 该命令用于控制是否激活sqlplus的错误日志
55.set escape {\ c on off} 该命令用于定义转字符
56.set escchar {@ ? % $ off} 该命令用于定义被转义的字符
57.set feedback {n off on} 该命令用于设置显示反馈信息的最低行数 默认值为6
58.set flagger {off entry intermen full} 该命令用于检查以确保SQL语句遵从sql 92标准
59.set flush {on off} 该命令用于控制输出何时发送到用户显示设备
60.set heading {on off} 用于设置是否显示列的标题
61.set headsep {c on off} 该命令用于设置col命令列标题的行分隔符
62.set instance [instance_path local] 该命令用于设置会话的默认例程
63.set lin [n] 该命令用于设置行宽度
64.set loboffset {n} 该命令用于设置检索和显示LOB数据的起始位置
65.set logsource [pathname] 该命令用于设置恢复时归档日志的位置
66.set long {n} 该命令用于设置LONG 和 lob 类型列的显示长度
67.set longc {n} 该命令用于设置SQLPLUS检索blob clob long nclob xmltype 类型值的增量尺寸
68.set newpage {n} 该命令用于设置页顶端到标题之间的行数
69.set null text 该命令用于设置null 显示文本
70.set numformat format 该命令用于设置数字的默认显示格式
71.set num[width] [n] 该命令用于设置数字值的默认显示宽度
72.set pagesize [n] 该命令用于设置每页所显示的行数
73.set pause {on off text} 该命令用于设置暂停显示文本,或者激活或禁止暂停显示
74.set recsep {wrapped | each off} 用于控制如何显示记录分隔符。
75.set recsepchar { | c} 用于设置记录分隔符
76.set serveroutput { on off} [size {n|unlimited}] [format {wrapped | word_wrapped | truncated}] 该命令用于控制是否显示dbms_output包的输出结果 SQL> exec dbms_output.put_line('hello'); hello
PL/SQL procedure successfully completed.
77.set shiftinout {visible|invisible} 用于控制是否在终端显示shift字符
78.set showmode {on | off} 用于控制是否显示set 命令的原值 和新 值 SQL> set arraysize 50 SQL> set show on new: showmode BOTH
SQL> set arraysize 15 old: arraysize 50 new: arraysize 15
79.set sqlblanklines {on|off} 该命令用于控制是否允许在SQL命令之间存在空行
80.set sqlcase {mixed|lower|upper} 该命令用于控制是否转换SQL命令的大小写
81.set sqlcontiue {>|text} 控制续行时所显示的文本
82.set sqlnumber {on | off} 控制是否显示SQL语句行号
83.set sqlpluscompat {x.y[.z]} 设置版本号 发布号 更新号
84.set sqlprefix {#|c} 该命令用于设置SQLplus前缀字符
85.set sqlprompt {text} 该命令用于设置SQL提示符
86.set sqlterminator [;|c|on|off] 该命令用于设置SQL语句终止符
87.set suffix {sql|text} 该命令用于设置默认文件扩展名
88.set tab {on|off} 该命令用于设置空格在终端的输出格式
89.set termout {on|off} 该命令用于控制SQL脚本输出
90.set time {on off} 该命令用于设置在SQL提示符前是否显示系统时间
91.set timing {on off} 该命令用于设置是否要显示SQL语句执行时间
92.set trimout {on off} 用于设置是否在显示行尾部截断空格
93.set trimspool {on off} 该命令用于设置是否在SPOOL行尾截断空格
94.set underline {- c on off} 该命令用于设置在列头底部显示的字符
95.set verify {on off} 该命令用于设置是否列出包含替代变量的文本
96.set wrap {on off} 该命令用于设置是否截断 被选择行
97.show 用于显示SQLPLUS环境变量值。
98.shutdown {abort| immediate |normal |transactional{local}} 关闭例程和数据库
99.spool [file_name [create |replace|append] | off | out] 用于将SQLPLUS屏幕内容存放到特定文件
100.start [url | file_name | ] [arg ...] 该命令用于运行SQL脚本文件
101.startup options | upgrade_options options [force] [restrice] [pfile=filename] [quiet ] [ mount [dbname] | [open [open_options] [dbname]]| nomount]
open_options : read [only |write [recover]] | recover upgrade_options: [pfile=filename] {upgrade | downgrade} [quiet]
102.store set file_name {create | replace | append} 该命令用于保存当前SQLPLUS环境属性到文件
103.timing [start text | show | stop] 该命令用于定义定时器名称,并计时数据 SQL> timing start a SQL> timing show timing for: a Elapsed: 00:00:06.03 SQL> timing show timing for: a Elapsed: 00:00:16.82 SQL> timing show timing for: a Elapsed: 00:00:19.73 SQL> timing show timing for: a Elapsed: 00:00:20.35 SQL> timing show timing for: a Elapsed: 00:00:20.93 SQL> timing stop timing for: a Elapsed: 00:00:28.84
104.title [printspec [text | variable]..] [on | off] 用于指定页标题 printspec : bold|center| col n|format text [left|right| skip n| tab n]
106.variable [variable [type]] 该命令用于定义在SQLPLUS 中定义邦定变量 variable: 指定替代变量名 type:指定数据类型 引用邦定变量时,必须要在邦定变量前加冒号。 当直接给邦定变量赋值时,需要使用execute命令
197.long 可以用set long 命令将LONG 截断点至少增加到 355(默认值为80),以查看视图的查询的全部文本
|
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2149540/,如需转载,请注明出处,否则将追究法律责任。