技术开发 频道

Oracle10g新特性——SQL*PLUS的改进

 在sqlplus 10.1.0.2中,就不需要这么费劲了,你可以用添加的方式存储:
SQL> select 1 ... SQL> save myscript Created file myscript.sql SQL> select 2 ... SQL> save myscript append Append file myscript sql SQL> select 3 ... SQL> save myscript append Append file myscript.sql
这样,所有的脚本都被存储在myscript.sql这个脚本中了。 

    这一特性对于spool同样适用。在9i中,输入spool res后,如果当前目录下不存在res.lst这个文件,就会创建它,如果已经存在,就会直接覆盖(不会给任何提示),然后将以后直到spool off的所有sqlplus上的信息存储在res.lst中。这样的话,如果原先有一个很重要的res.lst文件可能就无法恢复了。

在10g中,spool命令可以向已经存在的文件中添加内容:
SQL> spool res append
    如果忽略掉append子句就和9i中一样,会将已有文件覆盖,或者将append换为replace也会覆盖。而如果使用create子句就会先检查文件是否存在,如果存在,就会报错:

SYS on 2005-08-31 17:25:46 at teng>spool abc create

SP2-0771: 文件 "abc.LST" 已存在。

请使用其它名称或 "SPOOL filename[.ext] REPLACE"

Login.sql

    每次登录sqlplus时,会先执行$ORACLE_HOME/sqlplus/glogin.sql或者当前目录的login.sql脚本。但是,会存在各种各样的限制。在9i或以下版本里,假如你的脚本里有如下内容:

set sqlprompt "_connect_identifier >"
当第一次启动并连接到数据库DB1时,提示信息为:

DB1>

然后再连接到另外一个数据库上:

DB1> connect scott/tiger@db2 connected DB1>
    尽管连到了DB2,但提示信息还是DB1。说明这个提示有问题。其实原因很简单,login.sql只是在第一次启动sqlplus时执行,而在每次重新连接时不会执行。所以提示信息没有变。

在10g中,这种限制没有了。脚本不仅在启动sqlplus时执行,还会在每次连接数据库时也会执行:

DB1> connect scott/tiger@db2 connected DB2>
这样信息就是正确了。
0
相关文章