在看Thomas Kyte大师的《Oracle Database 9i/10g/11g编程艺术》的配置环境一节有一个login.sql脚本
define _editor=vi
set serveroutput on size 1000000
set trimspool on
set long 5000
set linesize 100
set pagesize 9999
column plan_plus_exp format a80
column global_name new_value gname
set termout off
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
这样sqlplus的提示符就会显示 用户名@tns服务名>,且做了一些环境的初始设置,书上很明显的意思是应当每次执行sqlplus的时候都会执行这个脚本,但我却没想明白是怎么才会去自动执行这个脚本的,所以每次我都还是手动的带全路径去执行这个login.sql脚本。
今天无意在网上看到了相关内容,一下就明白了
sqlplus 每次启动前,会读login.sql(若有的话) ,glogin.sql
login.sql只对某特定用户生效,它的优先级高于glogin.sql,glogin.sql是全局设置。
所以,同一个环境变量,比如linesize ,glogin.sql 和login.sql 都有设置,则login.sql 中的设置起作用。
glogin.sql 的文件位置固定,在$ORACLE_HOME/sqlplus/admin 下面
login.sql的位置不固定,一般将login.sql放在运行sqlplus 的当前目录(用pwd查看当前目录),即:/home/oralce
于是在glogin.sql中加入了那段脚本,直接在命令行用sqlplus连接数据库,果然自动执行了那段代码,然后将glogin.sql还原,又将login.sql拷贝到cmd窗口的当前目录,直接在命令行用sqlplus连接数据库,果然自动执行了login.sql脚本,再回来看Thomas Kyte大师对这个脚本的描述,终于是彻底明白了。
这样每次登录sqlplus后都会进行一些初始设置,从提示符也能很方便的知道当前连接的是哪个用户,而且连接不同的用户登录后这个提示符还能动态的变,而手动执行这个脚本的话没这个效果,应当是每次登录都会重新读取login.sql这个脚本,所以才会刷新提示符。