??? 最近遇到一個問題,在sqlplus首次登錄時,會調用login.sql,顯示指定的SQLPROMPT,但是當再次使用connect命令連接其他用戶時,顯示的SQLPROMPT一直無法改變,而且重新connect之后所有在login.sql中設置的屬性也全部丟失。找了很久原因之后才發現原來是因為Oracle的版本問題,9i中只能在初次登錄sqlplus時才會去調用login.sql,而在10g之后,每次connect都會調用該腳本。
?
??? 下面看一個轉載的文章,說的比較清楚:注意紅色粗體部分。
?
---------------------------------------------------------------------------------------------------------
?
Storing settings for SQL*PLUS (login.sql and glogin.sql)
?
glogin.sql
????Whenever SQL*PLUS starts up, it looks for a file namedglogin.sql under the directory $ORACLE_HOME/sqlplus/admin. If such a file is found, it is read and the containing statements executed. This allows to store settings (such as linesize) accross SQL*PLUS sessions.
?
???
New in Oracle 10g: Oracle also reads glogin.sql and login.sql at a connect in sql*plus.
login.sql
??? Additionally, after reading glogin.sql, sql*plus also looks for a file named login.sql in the directory from where SQL*PLUS was and in the directory that the environment variable SQLPATHpoints to and reads it and executes it. Settings from the login.sql take precedence over settings from glogin.sql
?
??? If the restriction level is set to 3, the login.sql is not read.
A common login.sql file
??? set pagesize 0
??? set linesize 190
??? define _editor=gvim
?
???
10g
??? Since Oracle 10g, the login.sql is executed after a connect.
??? This allows to have a prompt that displays the username.
??? For that, the following line must be in the login.sql:
??? set sqlprompt "&_user> "
?
------------------------------------------------------------------------------------------------------------
?
??? 同時在10g官方文檔《SQLPlus User's Guide and Reference》里也有記載,設置SQLPLUSCOMPATIBILITY可以改變sqlplus某些屬性,其中就包括glogin/login的讀取:
?
?
SET SQLPLUSCOMPATIBILITY {x.y[.z]}
?
Value??? Consequence?????????????????????????????????????????????????????????When available
>=10.1?? SHOW ERRORS sorts PL/SQL error messages using new???????????????????10.1
???????? columns only available in Oracle Database 10g.
>=10.1?? SPOOL Options CREATE, REPLACE, SAVE were added which????????????????10.1
?????????may affect filename parsing on some platforms.
>=10.1?? SET SQLPROMPT???????????????????????????????????????????????????????10.1
>=10.1?? Whitespace characters are allowed in Windows file names that??????? 10.1
???????? are enclosed in quotes. Some other special punctuation characters
???????? are now disallowed in Windows.
>=10.1?? Glogin/login files are called for each reconnect.???????????????????10.1
?<10.1???Uses the obsolete DOC> prompt when echoing /* comments.???????????? 10.1
?>=9.2?? A wide column defined FOLD_AFTER may be displayed at the??????????? 9.2.
???????? start of a new line. Otherwise it is incorrectly put at the end
???????? of thepreceding line with a smaller width than expected.
?>=9.0?? Whitespace before a slash ("/") in a SQL statement is ignored and?? 9.0.1.4.
???????? the slash is taken to mean execute the statement. Otherwise the
???????? slash is treated as part of the statement, for example, as a
???????? divisionsign.
?>=9.0?? The length specified for NCHAR and NVARCHAR2 types is???????????????9.0.1
???????? characters. Otherwise the length may represent bytes or
???????? characters depending on the character set.
?
-The End-