知识大全 SQL*PLUS命令的使用大全
Posted 命令
篇首语:勤勉而顽强地钻研,永远可以使你百尺竿头更进一步。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SQL*PLUS命令的使用大全相关的知识,希望对你有一定的参考价值。
SQL*PLUS命令的使用大全 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
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*plus命令 执行一个SQL脚本文件 SQL>start file_name SQL>@ file_name 我们可以将多条sql语句保存在一个文本文件中 这样当要执行这个文件中的所有的sql语句时 用上面的任一命令即可 这类似于dos中的批处理
@与@@的区别是什么?@等于start命令 用来运行一个sql脚本文件 @命令调用当前目录下的 或指定全路径 或可以通过SQLPATH环境变量搜寻到的脚本文件 该命令使用是一般要指定要执行的文件的全路径 否则从缺省路径(可用SQLPATH变量指定)下读取指定的文件 @@用在sql脚本文件中 用来说明用@@执行的sql脚本文件与@@所在的文件在同一目录下 而不用指定要执行sql脚本文件的全路径 也不是从SQLPATH环境变量指定的路径中寻找sql脚本文件 该命令一般用在脚本文件中 如 在c:\\temp目录下有文件start sql和nest_start sql start sql脚本文件的内容为 @@nest_start sql 相当于@ c:\\temp\\nest_start sql则我们在sql*plus中 这样执行 SQL> @ c:\\temp\\start sql
对当前的输入进行编辑 SQL>edit 重新运行上一次运行的sql语句 SQL>/ 将显示的内容输出到指定文件 SQL> SPOOL file_name 在屏幕上的所有内容都包含在该文件中 包括你输入的sql语句 关闭spool输出 SQL> SPOOL OFF 只有关闭spool输出 才会在输出文件中看到输出的内容 .显示一个表的结构 SQL> desc table_name COL命令 主要格式化列的显示形式 该命令有许多选项 具体如下 COL[UMN] [ column|expr [ option ]] Option选项可以是如下的子句: ALI[AS] alias CLE[AR] FOLD_A[FTER] FOLD_B[EFORE] FOR[MAT] format HEA[DING] text JUS[TIFY] L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT] LIKE expr|alias NEWL[INE] NEW_V[ALUE] variable NOPRI[NT]|PRI[NT] NUL[L] text OLD_V[ALUE] variable ON|OFF WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] ) 改变缺省的列标题 COLUMN column_name HEADING column_heading For example: Sql>select * from dept; DEPTNO DNAME LOC ACCOUNTING NEW YORK sql>col LOC heading location sql>select * from dept; DEPTNO DNAME location ACCOUNTING NEW YORK ) 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上 Sql>select * from emp Department name Salary aaa SQL> COLUMN ENAME HEADING Employee|Name Sql>select * from emp Employee Department name Salary aaa note: the col heading turn into o lines from one line ) 改变列的显示长度 FOR[MAT] format Sql>select empno ename job from emp; EMPNO ENAME JOB SMITH CLERK ALLEN SALESMAN WARD SALESMAN Sql> col ename format a EMPNO ENAME JOB SMITH CLERK ALLEN SALESMAN WARD SALESMAN ) 设置列标题的对齐方式 JUS[TIFY] L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT] SQL> col ename justify center SQL> / EMPNO ENAME JOB SMITH CLERK ALLEN SALESMAN WARD SALESMAN 对于NUMBER型的列 列标题缺省在右边 其它类型的列标题缺省在左边 ) 不让一个列显示在屏幕上 NOPRI[NT]|PRI[NT] SQL> col job noprint SQL> / EMPNO ENAME SMITH ALLEN WARD ) 格式化NUMBER类型列的显示 SQL> COLUMN SAL FORMAT $ SQL> / Employee Department Name Salary Commission ALLEN $ ) 显示列值时 如果列值为NULL值 用text值代替NULL值 M NUL[L] text SQL>COL M NUL[L] text ) 设置一个列的回绕方式 WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] COL HOW ARE YOU? SQL>COL COL FORMAT A SQL>COL COL WRAPPED COL HOW A RE YO U? SQL> COL COL WORD_WRAPPED COL HOW ARE YOU? SQL> COL COL WORD_WRAPPED COL HOW A ) 显示列的当前的显示属性值 SQL> COLUMN column_name ) 将所有列的显示属性设为缺省值 SQL> CLEAR COLUMNS 屏蔽掉一个列中显示的相同的值 BREAK ON break_column SQL> BREAK ON DEPTNO SQL> SELECT DEPTNO ENAME SAL FROM EMP WHERE SAL < ORDER BY DEPTNO; DEPTNO ENAME SAL CLARK MILLER SMITH ADAMS 在上面屏蔽掉一个列中显示的相同的值的显示中 每当列值变化时在值变化之前插入n个空行 BREAK ON break_column SKIP n SQL> BREAK ON DEPTNO SKIP SQL> / DEPTNO ENAME SAL CLARK MILLER SMITH ADAMS 显示对BREAK的设置 SQL> BREAK 删除 的设置 SQL> CLEAR BREAKS Set 命令 该命令包含许多子命令 SET system_variable value system_variable value 可以是如下的子句之一 APPI[NFO]ON|OFF|text ARRAY[SIZE] |n AUTO[MIT]ON|OFF|IMM[EDIATE]|n AUTOP[RINT] ON|OFF AUTORECOVERY [ON|OFF] AUTOT[RACE] ON|OFF|TRACE[ONLY] [EXP[LAIN]] [STAT[ISTICS]] BLO[CKTERMINATOR] |c CMDS[EP] ;|c|ON|OFF COLSEP _|text [PATIBILITY]V |V |NATIVE CON[CAT] |c|ON|OFF COPYC[OMMIT] |n COPYTYPECHECK ON|OFF DEF[INE] &|c|ON|OFF DESCRIBE [DEPTH |n|ALL][LINENUM ON|OFF][INDENT ON|OFF] ECHO ON|OFF EDITF[ILE] file_name[ ext] EMB[EDDED] ON|OFF ESC[APE] \\|c|ON|OFF FEED[BACK] |n|ON|OFF FLAGGER OFF|ENTRY |INTERMED[IATE]|FULL FLU[SH] ON|OFF HEA[DING] ON|OFF HEADS[EP] ||c|ON|OFF INSTANCE [instance_path|LOCAL] LIN[ESIZE] |n LOBOF[FSET] n| LOGSOURCE [pathname] LONG |n LONGC[HUNKSIZE] |n MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text] [ENTMAP ON|OFF] [SPOOL ON|OFF] [PRE[FORMAT] ON|OFF] NEWP[AGE] |n|NONE NULL text NUMF[ORMAT] format NUM[WIDTH] |n PAGES[IZE] |n PAU[SE] ON|OFF|text RECSEP WR[APPED]|EA[CH]|OFF RECSEPCHAR _|c SERVEROUT[PUT] ON|OFF [SIZE n] [FOR[MAT] WRA[PPED]|WOR[D_ WRAPPED]|TRU[NCATED]] SHIFT[INOUT] VIS[IBLE]|INV[ISIBLE] SHOW[MODE] ON|OFF SQLBL[ANKLINES] ON|OFF SQLC[ASE] MIX[ED]|LO[WER]|UP[PER] SQLCO[NTINUE] > |text SQLN[UMBER] ON|OFF SQLPRE[FIX] #|c SQLP[ROMPT] SQL>|text SQLT[ERMINATOR] ;|c|ON|OFF SUF[FIX] SQL|text TAB ON|OFF TERM[OUT] ON|OFF TI[ME] ON|OFF TIMI[NG] ON|OFF TRIM[OUT] ON|OFF TRIMS[POOL] ON|OFF UND[ERLINE] |c|ON|OFF VER[IFY] ON|OFF WRA[P] ON|OFF ) 设置当前session是否对修改的数据进行自动提交 SQL>SET AUTO[MIT] ON|OFF|IMM[EDIATE]| n ).在用start命令执行一个sql脚本时 是否显示脚本中正在执行的SQL语句 SQL> SET ECHO ON|OFF ) 是否显示当前sql语句查询或修改的行数 SQL> SET FEED[BACK] |n|ON|OFF 默认只有结果大于 行时才显示结果的行数 如果set feedback 则不管查询到多少行都返回 当为off 时 一律不显示查询的行数 ) 是否显示列标题 SQL> SET HEA[DING] ON|OFF 当set heading off 时 在每页的上面不显示列标题 而是以空白行代替 ) 设置一行可以容纳的字符数 SQL> SET LIN[ESIZE] |n 如果一行的输出内容大于设置的一行可容纳的字符数 则折行显示 ) 设置页与页之间的分隔 SQL> SET NEWP[AGE] |n|NONE 当set newpage 时 会在每页的开头有一个小的黑方框 当set newpage n 时 会在页和页之间隔着n个空行 当set newpage none 时 会在页和页之间没有任何间隔 ) 显示时 用text值代替NULL值 SQL> SET NULL text ) 设置一页有多少行数 SQL> SET PAGES[IZE] |n 如果设为 则所有的输出内容为一页并且不显示列标题 ) 是否显示用DBMS_OUTPUT PUT_LINE包进行输出的信息 SQL> SET SERVEROUT[PUT] ON|OFF 在编写存储过程时 我们有时会用dbms_output put_line将必要的信息输出 以便对存储过程进行调试 只有将serveroutput变量设为on后 信息才能显示在屏幕上 ) 当SQL语句的长度大于LINESIZE时 是否在显示时截取SQL语句 SQL> SET WRA[P] ON|OFF 当输出的行的长度大于设置的行的长度时(用set linesize n命令设置) 当set wrap on时 输出行的多于的字符会另起一行显示 否则 会将输出行的多于字符切除 不予显示 ) 是否在屏幕上显示输出的内容 主要用与SPOOL结合使用 SQL> SET TERM[OUT] ON|OFF 在用spool命令将一个大表中的内容输出到一个文件中时 将内容输出在屏幕上会耗费大量的时间 设置set termspool off后 则输出的内容只会保存在输出文件中 不会显示在屏幕上 极大的提高了spool的速度 ) 将SPOOL输出中每行后面多余的空格去掉 SQL> SET TRIMS[OUT] ON|OFF )显示每个sql语句花费的执行时间 set TIMING ON|OFF
) 遇到空行时不认为语句已经结束 从后续行接着读入 SET SQLBLANKLINES ONSql*plus中 不允许sql语句中间有空行 这在从其它地方拷贝脚本到sql*plus中执行时很麻烦 比如下面的脚本:select deptno empno enamefrom emp
where empno = ;如果拷贝到sql*plus中执行 就会出现错误 这个命令可以解决该问题
) 设置DBMS_OUTPUT的输出SET SERVEROUTPUT ON BUFFER 用dbms_output put_line( strin_content );可以在存储过程中输出信息 对存储过程进行调试如果想让dbms_output put_line( abc );的输出显示为 SQL> abc 而不是SQL>abc 则在SET SERVEROUTPUT ON后加format wrapped参数
) 输出的数据为格式set markup 在 版本(也许是 ? 不太确定)以后 sql*plus中有一个set markup 的命令 可以将sql*plus的输出以格式展现 注意其中的spool on 当在屏幕上输出的时候 我们看不出与不加spool on有什么区别 但是当我们使用spool filename 输出到文件的时候 会看到spool文件中出现了等tag
.修改sql buffer中的当前行中 第一个出现的字符串 C[HANGE] /old_value/new_value SQL> l * select * from dept SQL> c/dept/emp * select * from emp .编辑sql buffer中的sql语句 EDI[T] .显示sql buffer中的sql语句 list n显示sql buffer中的第n行 并使第n行成为当前行 L[IST] [n] .在sql buffer的当前行下面加一行或多行 I[NPUT] .将指定的文本加到sql buffer的当前行后面 A[PPEND] SQL> select deptno dname from dept; DEPTNO DNAME ACCOUNTING RESEARCH SALES OPERATIONS SQL> L * dname SQL> a loc * dname loc SQL> L select deptno dname loc * from dept SQL> / DEPTNO DNAME LOC ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO OPERATIONS BOSTON .将sql buffer中的sql语句保存到一个文件中 SAVE file_name .将一个文件中的sql语句导入到sql buffer中 GET file_name .再次执行刚才已经执行的sql语句 RUN or / .执行一个存储过程 EXECUTE procedure_name .在sql*plus中连接到指定的数据库 CONNECT user_name/passwd@db_alias .设置每个报表的顶部标题 TTITLE .设置每个报表的尾部标题 BTITLE .写一个注释 REMARK [text] .将指定的信息或一个空行输出到屏幕上 PROMPT [text] .将执行的过程暂停 等待用户响应后继续执行 PAUSE [text] Sql>PAUSE Adjust paper and press RETURN to continue .将一个数据库中的一些数据拷贝到另外一个数据库(如将一个表的数据拷贝到另一个数据库) COPY FROM database | TO database | FROM database TO database APPEND|CREATE|INSERT|REPLACE destination_table [(column column column )] USING query sql>COPY FROM SCOTT/TIGER@HQ TO JOHN/CHROME@WEST create emp_temp USING SELECT * FROM EMP .不退出sql*plus 在sql*plus中执行一个操作系统命令 HOST Sql> host hostname 该命令在windows下可能被支持 .在sql*plus中 切换到操作系统命令提示符下 运行操作系统命令后 可以再次切换回sql*plus ! sql>! $hostname $exit sql> 该命令在windows下不被支持 .显示sql*plus命令的帮助 HELP 如何安装帮助文件 Sql>@ ?\\sqlplus\\admin\\help\\hlpbld sql ?\\sqlplus\\admin\\help\\helpus sql Sql>help index .显示sql*plus系统变量的值或sql*plus环境变量的值 Syntax SHO[W] option where option represents one of the following terms or clauses: system_variable ALL BTI[TLE] ERR[ORS] [FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY| TRIGGER|VIEW|TYPE|TYPE BODY [schema ]name] LNO PARAMETERS [parameter_name] PNO REL[EASE] REPF[OOTER] REPH[EADER] SGA SPOO[L] SQLCODE TTI[TLE] USER ) 显示当前环境变量的值 Show all ) 显示当前在创建函数 存储过程 触发器 包等对象的错误信息 Show error 当创建一个函数 存储过程等出错时 变可以用该命令查看在那个地方出错及相应的出错信息 进行修改后再次进行编译 ) 显示初始化参数的值 show PARAMETERS [parameter_name] ) 显示数据库的版本 show REL[EASE] ) 显示SGA的大小 show SGA ) 显示当前的用户名 show user
查询一个用户下的对象SQL>select * from tab;SQL>select * from user_objects;
查询一个用户下的所有的表SQL>select * from user_tables;
查询一个用户下的所有的索引SQL>select * from user_indexes;
定义一个用户变量方法有两个 a defineb COL[UMN] [column|expr NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]] OLD_V[ALUE] variable [NOPRI[NT]|PRI[NT]]
下面对每种方式给予解释 a SyntaxDEF[INE] [variable]|[variable = text]定义一个用户变量并且可以分配给它一个CHAR值
assign the value MANAGER to the variable POS type:SQL> DEFINE POS = MANAGER
assign the CHAR value to the variable DEPTNO type:SQL> DEFINE DEPTNO =
list the definition of DEPTNO enterSQL> DEFINE DEPTNO ―――――――――――――――DEFINE DEPTNO = (CHAR)
定义了用户变量POS后 就可以在sql*plus中用&POS或&&POS来引用该变量的值 sql*plus不会再提示你给变量输入值
b COL[UMN] [column|expr NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]NEW_V[ALUE] variable指定一个变量容纳查询出的列值 例:column col_name new_value var_name noprint select col_name from table_name where …… 将下面查询出的col_name列的值赋给var_name变量
一个综合的例子:得到一个列值的两次查询之差(此例为 秒之内共提交了多少事务):column redo_writes new_value mit_count
select sum(stat value) redo_writesfrom v$sesstat stat v$statname snwhere stat statistic# = sn statistic#and sn name = user mits ;
等待一会儿(此处为 秒);execute dbms_lock sleep( );
set veri offselect sum(stat value) &mit_count mits_addedfrom v$sesstat stat v$statname snwhere stat statistic# = sn statistic#and sn name = user mits ;
定义一个绑定变量VAR[IABLE] [variable [NUMBER|CHAR|CHAR (n)|NCHAR|NCHAR (n) |VARCHAR (n)|NVARCHAR (n)|CLOB|NCLOB|REFCURSOR]]定义一个绑定变量 该变量可以在pl/sql中引用 可以用print命令显示该绑定变量的信息 如 column inst_num heading Inst Num new_value inst_num format ;column inst_name heading Instance new_value inst_name format a ;column db_name heading DB Name new_value db_name format a ;column dbid heading DB Id new_value dbid format just c;
promptprompt Current Instanceprompt ~~~~~~~~~~~~~~~~
select d dbid dbid d name db_name i instance_number inst_num i instance_name inst_name from v$database d v$instance i;
variable dbid number;variable inst_num number;begin :dbid := &dbid; :inst_num := &inst_num;end;/说明 在sql*plus中 该绑定变量可以作为一个存储过程的参数 也可以在匿名PL/SQL块中直接引用 为了显示用VARIABLE命令创建的绑定变量的值 可以用print命令
注意 绑定变量不同于变量 . 定义方法不同 . 引用方法不同绑定变量 :variable_name 变量 &variable_name or &&variable_name 在sql*plus中 可以定义同名的绑定变量与用户变量 但是引用的方法不同
&与&&的区别&用来创建一个临时变量 每当遇到这个临时变量时 都会提示你输入一个值 &&用来创建一个持久变量 就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样 当用&&命令引用这个变量时 不会每次遇到该变量就提示用户键入值 而只是在第一次遇到时提示一次
如 将下面三行语句存为一个脚本文件 运行该脚本文件 会提示三次 让输入deptnoval的值 select count(*) from emp where deptno = &deptnoval;select count(*) from emp where deptno = &deptnoval;select count(*) from emp where deptno = &deptnoval;
将下面三行语句存为一个脚本文件 运行该脚本文件 则只会提示一次 让输入deptnoval的值 select count(*) from emp where deptno = &&deptnoval;select count(*) from emp where deptno = &&deptnoval;select count(*) from emp where deptno = &&deptnoval;
.在输入sql语句的过程中临时先运行一个sql*plus命令(摘自)#有没有过这样的经历? 在sql*plus中敲了很长的命令后 突然发现想不起某个列的名字了 如果取消当前的命令 待查询后再重敲 那太痛苦了 当然你可以另开一个sql*plus窗口进行查询 但这里提供的方法更简单
比如说 你想查工资大于 的员工的信息 输入了下面的语句:
SQL> select deptno empno ename from emp where这时 你发现你想不起来工资的列名是什么了
这种情况下 只要在下一行以#开头 就可以执行一条sql*plus命令 执行完后 刚才的语句可以继续输入
SQL>> select deptno empno ename from emp where #desc empName Null? Type EMPNO NOT NULL NUMBER( )ENAME VARCHAR ( )JOB VARCHAR ( )MGR NUMBER( )HIREDATE DATESAL NUMBER( )M NUMBER( )DEPTNO NUMBER( )
sal > ;
DEPTNO EMPNO ENAME KING
cha138/Article/program/Oracle/201311/18384相关参考
Oracle中SQL*PLUS使用的一些技巧 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Sq
安装好Oracle后SQL*Plus的操作初步 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 系
知识大全 使用Expect和命名管状远程控制SQL*Plus
使用Expect和命名管状远程控制SQL*Plus 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 解决使用ORACLE SQL*PLUS时没有监听器的问题
解决使用ORACLESQL*PLUS时没有监听器的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 如何在SQL *Plus中把数据库栏以变量的形式保存
如何在SQL*Plus中把数据库栏以变量的形式保存 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 oracle中怎样从sql*plus向shell传递变量
很多人在实际的工作和学习中都遇到了无法通过sqlplus向shell传递变量下面我们来介绍一个实例脚本来进行折中处理 > 下面我们再来介绍另一个实例方法 >>>cha138/Artic
关于sqlplus中隐患组合键今天就来详细解说一下吧! SQLPlus 在UNIX/Linux平台中的SQL*Plus命令行提示符下如果误按了组合键 Ctrl+S那么这个会话将被锁定输入任何
SQL命令查询Oracle存储过程信息 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SELEC
SQLSERVERDBCC命令解释 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQLSERV
深入浅出SQL系列教程之基本SELECT命令 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! se