[20241112]無法理解sqlplus的輸出.txt

lfree發表於2024-11-13
[20241112]無法理解sqlplus的輸出.txt

--//昨天遇到的問題,執行10tox.sql指令碼出現一些狀況。分析認為oracle 把8d當作數字。
--//但是還是遇到我無法理解的情況:

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

2.測試:
SCOTT@book> select 1a,2b,3c,4d,5e,6f,7z1 from dual ;
A B C 4D E 6F Z1
---------- ---------- ---------- ---------- ---------- ---------- ----------
1 2 3 4.0E+000 5 6.0E+000 7
--//實際上就是將1a 變成 1 A,A作為了欄位名。
--//但是4d,6f出現科學計數法的輸出格式,為什麼?

SCOTT@book> @ hash
HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
2105708413 b34gktxys53vx 0 36733 1388734953 7d828f7d 2024-11-12 17:27:40 16777216

SCOTT@book> @ expand_sql_text b34gktxys53vx
SELECT 1 "A",2 "B",3 "C",4d "4D",5 "E",6f "6F",7 "Z1" FROM "SYS"."DUAL" "A1"
PL/SQL procedure successfully completed.

--//展開後出現4d "4d",6f "6f"的情況,不理解。似乎有時候d f代替e的功能。

--//再貼一些例子:
SCOTT@book> select 8d+3e+5f from dual ;
8D+3E+5F
----------
3.0E+005

SCOTT@book> set numw 20
SCOTT@book> select 8d+3e+5f from dual ;

8D+3E+5F
--------------------
3.00008E+005

--//相當於解析位 8 + 3e5 。

SCOTT@book> select 8e+3d+5f from dual ;

8E+3D+5F
--------------------
8.005E+003

--//8e3 + 5。

SCOTT@book> select 1a + 2b from dual ;
select 1a + 2b from dual
*
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
--//這樣寫不能參與計算的。

SCOTT@book> select 16O from dual ;
O
--------------------
16

SCOTT@book> select 8+16o from dual ;
O
--------------------
24

SCOTT@book> select 16o+8 from dual ;
select 16o+8 from dual
*
ERROR at line 1:
ORA-00923: FROM keyword not found where expected

SCOTT@book> select 16d+8 from dual ;
16D+8
--------------------
2.4E+001

--//那位給出一些解析,oracle為什麼這樣設計。
--//晚上想一想,似乎d表示decimal,f表示浮點型,e表示冪數,輸出採用科學計數法。

SCOTT@book> select 4d,5d ,5.3d ,5.4de, 5.5fd from dual ;

4D 5D 5.3D E D
---------- ---------- ---------- ---------- ----------
4.0E+000 5.0E+000 5.3E+000 5.4E+000 5.5E+000

--//一些細節留給大家揣摩吧...

相關文章