ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 全面了解SQL*PLUS工具的一点补充

全面了解SQL*PLUS工具的一点补充

原创 Linux操作系统 作者:xilangxiangwa 时间:2010-09-13 09:44:59 0 删除 编辑

全面了解SQL*PLUS工具的一点补充

1、  大家都知道在WINDOWS 下,进入SQL*PLUS 有两种方法:

第一种是直接双击带十字架的SQL PLUS图标;

第二种是从命令窗口进入,输入SQLPLUS命令。

但其实调用的是两个不同的应用程序(其实也就是SQL * PLUS 的两个不同版本)。

第一种方法运行的是 sqlplusw.exe 程序(注意当是其它工具带的SQL*PLUS工具时名字可能会有所区别,如:PLUS80W.EXE),而第二种方法运行的是 sqlplus.exe 程序。

但两个应用程序在WINDOWS 下所在的路径是相同的。例如我电脑上的这两个程序所在的路径都是:E:\oracle\product\10.2.0\db_1\BIN。

2、  大家都知道SQL*PLUS在启动时会自动运行两个脚本:glogin.sql 、login.sql。

但glogin.sql是默认会创建的,也就是说原本就有的,只要没有人为删除的话,就能找到这样一个文件。

WINDOWS下,glogin.sql默认所在路径如:E:\oracle\product\10.2.0\db_1\sqlplus\admin

而login.sql文件是要人工手动去创建的。如果没有创建自然SQL*PLUS也自动加载不到这样一个文件。

3、  大家都知道SQL*PLUS在启动时先运行glogin.sql文件,再运行login.sql文件。

但要运行login.sql文件,肯定是先要找到该文件,而SQL*PLUS查找该文件的顺序是:先在当前路径下查找,如找到就运行,运行后终止查找。如没找到再查找有没有SQLPATH环境变量,如有就在该环境变量所对应的路径下查找,如找到就运行,运行后终止查找。如没找到同样终止查找,不再去别的地方查找。如没有SQLPATH环境变量同样终止查找,不再去别的地方查找。而查找glogin.sql只在默认路径下找查,所以一般不移动glogin.sql文件所在的路径。

4、  解释下“当前路径”:

“当前路径”并不指sqlplusw.exe 或 sqlplus.exe 应用程序所在的路径;不同情况(方法)“当前路径”有不同的意义。具体如下:

如果是采用双击带十字架的SQL PLUS图标的方法,进入SQL*PLUS的话,那么当前路径即对应应用程序所在路径。可以通过右击带十字架的图标,然后点击属性查看该路径。

如果是采用在命令窗口输入SQLPLUS命令的方法,进入SQL*PLUS的话,那么当前路径即输入SQLPLUS命令时所在的当前路径。比如:当输入SQLPLUS命令时的提示符为:“C:Documents and Settings\username>”,那么当前路径指的就是“C:Documents and Settings\username”;当输入SQLPLUS命令时的提示符为:“D:\>”,那么当前路径指的就是“D:\”;

5、  建议采用环境变量SQLPATH的方式指定login.sql所在的路径。当设定好SQLPATH环境变量后,一定要退出命令窗口后(注意是命令窗口,而不是命令窗口下的SQL*PLUS),再进入命令窗口,再调用SQL*PLUS才会生效。 而如果直接把login.sql文件放在当前目录下,则只需要退出命令窗口下的SQL*PLUS后,然后再次调用进入SQL*PLUS即可生效,也就是说不用连命令窗口也退出再进。当采用SQLPATH环境变量的方式指定login.sql所在的路径的方法时,应确保与环境变量SQLPATH所指的路径不相同的当前路径下不再有login.sql。否则运行的是当前路径下的login.sql文件,而不是环境变量SQLPATH所指的路径下的login.sql文件。

6、  测试以上结论可能还会用到的知识点:

在WINDOWS命令窗口下,切换路径,举例说明:

1、“C:Documents and Settings\username”切换到C盘,命令:cd c:\

2、“C:Documents and Settings\username”切换到D盘,命令:d:

3、“C:\”切换到D盘,命令:d:

附:Thomas Kyte 常用的login.sql文件内容:

   文件内容:

set termout off

define _editor=vi

set serveroutput on size 1000000 format wrapped

column object_name format a30

column segment_name format a30

column file_name format a40

column name format a30

column file_name format a30

column what format a30 word_wrapped

column plan_plus_exp format a100

set trimspool on

set long 5000

set linesize 131

set pagesize 9999

define gname=idle

column global_name new_value gname

select lower(user)||'@'||

substr(global_name , 1 ,decode(dot,0,length(global_name),dot-1) ) global_name

from (select global_name ,instr(global_name,'.') dot

        from global_name );

set sqlprompt '&gname>'

set termout on

语句功能解析:

1、set termout off :

禁止所运行的脚本中所产生的输出输出到界面上。

2、define _editor=vi :

将编辑工具(即在SQLPLUS中输入ED命令时弹出的编辑器)设置为VI编辑器。一般在LINUX或UNIX下才这样设置。在WINDOW下默认编辑工具为记事本。

3、set serveroutput on size 1000000 format wrapped:

使界面上能显示出DBMS_OUTPUT.PUT_LINE包所输出的内容,且设置为最大显示范围,且输出内容的回绕方式为按字符(另一种方式为按单词word_wrapped)。

4、column object_name format a30

column segment_name format a30

column file_name format a40

column name format a30

column file_name format a30

column what format a30 word_wrapped

column plan_plus_exp format a100

以上为定义列的类型与宽度,并指定列的回绕方式(按字符还是按单词)

5、set trimspool on

去掉利用SPOOL命令导出的文档中各行数据后面的空格。因默认情况下利用SPOOL命令导出的文档中各行数据后面会填冲很多空格,从而使得各行长度相等。

6、set long 5000

   设置LONG 、CLOB类型的列在SQLPLUS中能够显示的长度。

默认情况下是只能显示出80个字符。但这个通常太短,所以往往需要人工设置大点。可以通过下面的查询语句进行测试:

select view_name,text from dba_views where view_name = 'USER_TABLES';

7、 set linesize 131

设置行的显示宽度(按字符计算),默认80字符,最大999个字符

超过所设置的宽度时,折行显示。

8、 set pagesize 9999

设置每页显示的行数。注意:标题与横线各占一行。

9、define gname=idle

column global_name new_value gname

select lower(user)||'@'||

substr(global_name , 1 ,decode(dot,0,length(global_name),dot-1) ) global_name

from (select global_name ,instr(global_name,'.') dot

        from global_name );

set sqlprompt '&gname>'

1>、以上一组代码的功能是将提示符修改为:用户名+@+全局数据库名。

2>、define gname=idle 定义一个替代变量gname,并赋初始值为idle。

使用define命令定义的变量在下次引用时,SQLPLUS不会提示输入。

(使用def 命令可以查看SQLPLUS环境下所有通过DEFINE 所定义的变量)

3>、column global_name new_value gname:将列名与变量名绑定在一起,此后查询该列时,会将该列的值存入被绑定的变量中.

4>、select lower(user)||'@'||

substr(global_name , 1 ,decode(dot,0,length(global_name),dot-1) ) global_name

from (select global_name ,instr(global_name,'.') dot

        from global_name );

查询全局数据库名,并构造出:用户名+@+全局数据库名 格式的结果。

5>、set sqlprompt '&gname>'  :

   设置提示符。可以分别运行语句:set sqlprompt test ;与 set sqlprompt test> ;

   看下效果。

10、set termout on :

允许所运行的脚本中所产生的输出输出到界面上。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10595277/viewspace-673698/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 碰到current_date
请登录后发表评论 登录
全部评论

注册时间:2008-01-18

  • 博文量
    71
  • 访问量
    411421