Oracle
SQL*Plus 預設輸出格式
我注意到使用相同的 SQL*Plus 客戶端連接到不同的 Oracle 數據庫會導致相同 SQL 查詢的不同輸出。
數據庫 1:
C:\Oracle\instantclient_10_2>sqlplus user/passwd@'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1521))(CONNECT_DATA=(SID=SID1)))' SQL*Plus: Release 10.2.0.5.0 - Production on Fri Aug 23 11:54:45 2013 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options SQL> select 'XXXX ',to_char(UniqueSequenceNumber,'xxxxxxxxxxxxxx') from mytable where rownum < 2; 'XXXX TO_CHAR(UNIQUES ----- --------------- XXXX 300f483
這裡輸出在一行上,標題被截斷。
在另一個數據庫上也是如此:
C:\Oracle\instantclient_10_2>sqlplus user/passwd@'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1521))(CONNECT_DATA=(SID=SID2)))' SQL*Plus: Release 10.2.0.5.0 - Production on Fri Aug 23 11:58:15 2013 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, Data Mining and Real Application Testing options SQL> select 'XXXX ',to_char(UniqueSequenceNumber,'xxxxxxxxxxxxxx') from mytable where rownum < 2; 'XXXX' -------------------------------- TO_CHAR(UNIQUESEQUENCENUMBER,'XXXXXXXXXXXXXX') -------------------------------------------------------------------------------- XXXX 3a1393b
這裡的輸出分為兩行。
我不是在尋找只會影響目前會話的 SQL*Plus 格式化選項,如 linesize、column format 等。我需要了解的是,即使我沒有指定任何選項,輸出也會有所不同。
伺服器端是否有一些預設設置?它是否取決於 Oracle 伺服器版本(一種情況下為 10.2.0.1,另一種情況下為 10.2.0.5)?
注意:列
UniqueSequenceNumber
是類型NUMBER
注 2:在伺服器版本 10.2.0.3 上嘗試過,結果與 10.2.0.1 相同(一個班輪)
回复奇蹟173:
C:\Oracle\instantclient_10_2>sqlplus /nolog SQL*Plus: Release 10.2.0.5.0 - Production on Mon Aug 26 09:32:02 2013 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. SQL> connect user/passwd@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1521))(CONNECT_DATA=(SID=SID1))) Connected. SQL> select 'xxxx' from dual; 'XXX ---- xxxx SQL> connect user/passwd@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1521))(CONNECT_DATA=(SID=SID2))) Connected. SQL> select 'xxxx' from dual; 'XXXX' -------------------------------- xxxx SQL> connect user/passwd@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1521))(CONNECT_DATA=(SID=SID1))) Connected. SQL> select 'xxxx' from dual; 'XXX ---- xxxx SQL> connect user/passwd@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1521))(CONNECT_DATA=(SID=SID2))) Connected. SQL> select 'xxxx' from dual; 'XXXX' -------------------------------- xxxx
Tom Kyte 曾經發布過類似的內容,問題是 CURSOR_SHARING 參數。
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3696883368520
如果它在 host2 上的系統/數據庫級別設置為 FORCE,它可能會將“XXXX”硬編碼值映射/強制為任意 32 個字元的變數。
至少有控制 sqlplus 行為的文件 - 它們是目前目錄中的“login.sql”和 $ORACLE_HOME/sqlplus/admin/ 中的“glogin.sql” 檢查兩台伺服器上的這些文件。
閱讀文件了解更多資訊: http ://docs.oracle.com/cd/B28359_01/server.111/b31189/ch2.htm (適用於 10g AFAIK)。