[20221202]sqlplus set trimout 問題.txt
[20221202]sqlplus set trimout 問題.txt
--//自己對這個不是很瞭解,做一個測試,上網查詢到的設定是:
--//set trimout on; -- 去除標準輸出每行的行尾空格(預設為off)
--//透過測試說明問題:
1.環境:
SCOTT@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
--//我登入設定如下:
SCOTT@book> show trimout
trimout ON
2.建立測試例子:
$ cat -Ev /tmp/aa.txt
select $
sysdate from dual ;$
--//注意結尾的空格.
SCOTT@book> @ /tmp/aa.txt
SYSDATE
-------------------
2022-12-02 09:07:06
--//手工執行5次以上,不要退出.
SCOTT@book> @ hash
HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
3737888546 bz7x703gcr9t2 0 108322 1388734953 decba722 2022-12-02 09:07:05 16777222
3.分析:
$ rlsql -s -l scott/book <<< "column sql_fulltext format a40 ^Jset trimout on^Jselect sql_fulltext from v\$sqlarea where sql_id='bz7x703gcr9t2';"| cat -Ev
SQL_FULLTEXT$
----------------------------------------$
select$
sysdate from dual$
$
$
--//^J 在linux下透過ctrl+v ctrl+j輸入.
--//注意一個位元組select後面的空格沒有輸出,後來再說明問題.
$ rlsql -s -l scott/book <<< "column sql_fulltext format a40 ^Jset trimout off^Jselect sql_fulltext from v\$sqlarea where sql_id='bz7x703gcr9t2';"| cat -Ev
SQL_FULLTEXT $
---------------------------------------- $
select $
sysdate from dual $
$
$
--//最後的$出現第271列,..太長我移動到放在44列上.為什麼出現在271列.我改變視窗大小嚐試視乎$也是出現在271列上.
$ rlsql -s -l scott/book <<< "show all;"| grep 27
linesize 270
--//可以肯定出現空格最後的位置與linesize=270設定相關.
$ rlsql -s -l scott/book <<< "set linesize 50 ;column sql_fulltext format a40 ^Jset trimout off^Jselect sql_fulltext from v\$sqlarea where sql_id='bz7x703gcr9t2';"| cat -Ev
SP2-0158: unknown SET option ";column"$
SQL_FULLTEXT $
--------------------------------------------------$
select $
sysdate from dual $
$
$
--//出現在51列也可以確定與linesize設定相關.這樣問題就可以確定了.
--//set trimout on 去除標準輸出每行的行尾空格,但是如果字串結尾有空格呢.
SCOTT@book> select dump(to_char(sql_fulltext),16) c50 , sql_fulltext c40 ,length(sql_fulltext) n10 from v$sqlarea where sql_id='bz7x703gcr9t2';
C50 C40 N10
-------------------------------------------------- ---------------------------------------- ---------------------
Typ=1 Len=31: 20,20,20,20,20,20,73,65,6c,65,63,74, select 31
a,73,79,73,64,61,74,65,20,66,72,6f,6d,20,64,75,61, sysdate from dual
6c,20
--//你可以發現sqlplus在執行語句時,sqlplus做了"處理"刪除了每行結尾空格.而最後一行分號前的空格保留,也就是僅僅去除分號.
SCOTT@book> host wc /tmp/aa.txt
2 5 39 /tmp/aa.txt
--//這個也是我最近測試遇到的問題,w3wp.exe 的程式,對結尾的空格不做這樣的處理,並且裡面chr(13)字元(\r) 也不刪除,這樣導致我
--//在sqlplus執行的語句的sql_id與文w3wp.exe執行的sql_id不一致.
--//實際上每種工具可能處理的方式不一樣,比如toad.
select Sysdate from dual;
select Sysdate from dual ;
select Sysdate from dual ;
select Sysdate from dual;
select Sysdate from dual ;
select Sysdate from dual ;
--//這些sql語句執行的sql_id都是一樣的;toad下刪除分號前的全部空格,而slect前面的空格也全部刪除.
SCOTT@book> select executions,sql_id,sql_text c80 from v$sql where sql_id='3nwy6z05jvcaa';
EXECUTIONS SQL_ID C80
---------- ------------- --------------------------------------------------------------------------------
6 3nwy6z05jvcaa select Sysdate from dual
--//執行了6次.也就是每種工具在處理語句前都可能做了一些"格式化"的處理工作.
--//早期toad版本(9.6版本)是在結尾的分號前加入一個空格.參考連結:
--//[20120327]toad與sqlplus下執行sql語句的一個細節.txt=>http://blog.itpub.net/267265/viewspace-719592/
--//[20150803]toad 12版本1個小變化.txt =>http://blog.itpub.net/267265/viewspace-1760071/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2926325/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20221203]sqlplus set trimspool 問題.txtSQL
- [20120109]sqlplus 與set longchunksize 設定問題.txtSQLGC
- [20160113]sqlplus使用問題.txtSQL
- [20190215]sqlplus set arraysize.txtSQL
- [20170916]sqlplus set array最小2補充.txtSQL
- [20120410] sqlplus中set termout off.txtSQL
- sqlplus set命令SQL
- [20141216]sqlplus的set appinfo.txtSQLAPP
- sqlplus set命令使用SQL
- [20180130]sqlplus欄位顯示問題.txtSQL
- sqlplus常用set指令(轉)SQL
- [20120209] SET AUTOTRACE TRACEONLY EXPLAIN的問題.txtAI
- [20210722]sqlplus下show recycebin的小問題.txtSQL
- [20190108]rlwrap sqlplus tee相關問題.txtSQL
- cassandra get set同步問題
- sqlplus註釋問題SQL
- cmd_sqlplus:set head off and set head onSQL
- sqlplus與空行.txtSQL
- [20181122]18c sqlplus set linesize.txtSQL
- [20191204]sqlplus特殊定義導致的問題.txtSQL
- [20211220]記錄使用sqlplus的小問題.txtSQL
- SQLPLUS之set常用設定SQL
- [20120106]11G sqlplus set errorloging on.txtSQLError
- [20211221]記錄使用sqlplus的小問題補充.txtSQL
- [20190110]rlwrap sqlplus tee相關問題3.txtSQL
- Sqlplus下的set命令詳解SQL
- sqlplus 環境下部分set 命令SQL
- [20131121]12c sqlplus的set colinvisible on.txtSQL
- PLSQL Developer_v7_sqlplus:set head off and set head onSQLDeveloper
- 登陸sqlplus出現問號的問題SQL
- sqlplus_set describe linenumSQL
- postgresql copy UNICODE txt 問題。SQLUnicode
- 解決set newname 極慢的問題
- Oracle - SQLPlus中文顯示亂碼問題OracleSQL
- [20240818]測試21c下sqlplus show recyclebin的小問題2.txtSQL
- Lombok生成get/set異常問題(Lombok缺陷)Lombok
- 問題解決——Sqlplus與換行前空格(一)SQL
- 問題解決——Sqlplus與換行前空格(二)SQL