sqlplus的命令很多,我们不可能全部都记住,这时候就需要使用帮助文档,sqlplus提供了一个help命令,类似于linux系统的man命令。
sqlplus 的help命令不是很神奇,就是在system用户下建了一张help表,然后将帮助信息插入,当用户在sqlplus 下敲 help command_name时,sqlplus就访问system.help表,返回结果。
用法:help command_name
但是oracle database建好之后,help system(帮助系统)不一定创建,这时候我们就需要手工的创建help system.
我的环境是oracle 10g,Linux redhat4
进入目录:$ORACLE_HOME/sqlplus/admin/help, 该目录下有四个文件:helpbld.sql、helpdrop.sql、helpus.sql、hlpbld.sql
这4个sql脚本内容也不是很多,建议在安装sqlplus help system之前,先阅读下这几个scripts
helpbld.sql : 安装help system的脚本,需要两个参数。参数1是$ORACLE_HOME/sqlplus/admin/help,参数2是$ORACLE_HOME/sqlplus/admin/help/helpus.sql
helpdrop.sql : 删除help system
helpus.sql : Inserts English language SQL*Plus HELP text into the HELP table
hlpbld.sql : 真正干活的脚本,由helpbld.sql调用
下面就以我的系统为例,来创建sqlplus help system. (注意:一定要以system用户来创建)
[oracle@redhat4 ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 6月 14 20:37:09 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn system/manager
Connected.
SQL> show user
USER is "SYSTEM"
SQL> help set
SP2-0171: HELP system not available. -- 当前帮助系统不可用
SQL> @@?/sqlplus/admin/help/helpbld.sql $ORACLE_HOME/sqlplus/admin/help $ORACLE_HOME/sqlplus/admin/help/helpus.sql
DROP TABLE HELP
*
ERROR at line 1:
ORA-00942: table or view does not exist
Table created.
Grant succeeded.
1 row created.
. . . (OK,下面来校验下help system是否按照成功)
[oracle@redhat4 ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 6月 14 20:51:41 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn scott/tiger
Connected.
SQL> help exec
EXECUTE
-------
Executes a single PL/SQL statement or runs a stored procedure.
EXEC[UTE] statement
SQL>
安装成功。
验证sqlplus help信息的来源
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\zlf>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期日 6月 15 16:35:58 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn scott/tiger@demodb
已连接。
SQL> show user
USER 为 "SCOTT"
SQL> alter session set sql_trace=true; -- 打开 sql trace功能
会话已更改。
SQL> help exec
EXECUTE
-------
Executes a single PL/SQL statement or runs a stored procedure.
EXEC[UTE] statement
SQL>
此时,查看后台的user trace文件,位置:$ORACLE_BASE/admin/SID/udump,找到对应的trace 文件
下面是我的trace file内容:
由于trace文件内容很多,这里我只列出关键的部分
[oracle@redhat4 udump]$ cat demo_ora_4654.trc | grep HELP
SELECT INFO FROM SYSTEM.HELP WHERE UPPER(TOPIC) LIKE :1 ORDER BY TOPIC,SEQ
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE NO_PARALLEL(SAMPLESUB) opt_param('parallel_execution_enabled', 'false') NO_PARALLEL_INDEX(SAMPLESUB) NO_SQL_TUNE */ NVL(SUM(C1),0), NVL(SUM(C2),0) FROM (SELECT /*+ IGNORE_WHERE_CLAUSE NO_PARALLEL("HELP") FULL("HELP") NO_PARALLEL_INDEX("HELP") */ 1 AS C1, CASE WHEN UPPER("HELP"."TOPIC") LIKE :B1 THEN 1 ELSE 0 END AS C2 FROM "SYSTEM"."HELP" "HELP") SAMPLESUB
STAT #2 id=2 cnt=978 pid=1 pos=1 obj=9949 op='TABLE ACCESS FULL HELP (cr=9 pr=7 pw=0 time=2448 us)'
注意标红色的SELECT语句,此语句体现了信息存放在SYSTEM.HELP表中。
[oracle@redhat4 ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期日 6月 15 16:55:42 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn system/manager
Connected.
SQL> desc help
Name Null? Type
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
TOPIC NOT NULL VARCHAR2(50)
SEQ NOT NULL NUMBER
INFO VARCHAR2(80)
SQL> select info from help where lower(topic)='exec';
no rows selected
SQL> select info from help where lower(topic)='execute';
INFO
--------------------------------------------------------------------------------
EXECUTE
-------
Executes a single PL/SQL statement or runs a stored procedure.
EXEC[UTE] statement
8 rows selected.
SQL>
证明了sqlplus的help信息确实是来自system.help表