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
三、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
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
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 ---------- -------------------- 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
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;
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