環境:
vm6.5+win2003 sp1+ oracle 11.2.0.1(32-bit)
oracle 資料庫字符集:zhs16gbk 國家字符集al16utf16
今天的任務:
了解oracle dump函式
目的:了解資訊在由dump函式處理後是如何輸出的。
簡單接受,開始我的學習路程。
首先了解乙個dump的語法
(該圖取自oralce官方文件oracle® database sql language reference 11g release 2 (11.2))
dump函式返回乙個varchar2的值,該值格式如下
type=××× len=×××: ×××(,×××)*
type可以參閱data types
len 位元組數
引數說明:
return_fmt
8 返回8進製結果
10 返回10進製結果
16返回16進製制結果
17以每個位元組作為單個字元返回,當且僅當它可以被解釋為編譯器的字符集中的可列印字元-------通常是ascii or ebcdic。
start_position and length
確定要返回的內部表示形式的哪個部分。
expr 為 null,則此函式返回 null。
該函式不支援clob直接作為引數。但是,可以作為通過隱式資料轉換引數中傳遞 clob值。
例子如下:
sql> select dump(1,16) from dual;
dump(1,16)
typ=2 len=2: c1,2
sql> select dump(1,10) from dual;
dump(1,10)
typ=2 len=2: 193,2
sql> select dump('火狐',16) from dual;
dump('火狐',16)
typ=96 len=4: bb,f0,ba,fc
sql> select dump('us',16) from dual;
dump('us',16)
typ=96 len=2: 55,53
sql> select dump('us',17) from dual;
dump('us',17)
typ=96 len=2: u,s
sql> select dump('火狐',17) from dual;
dump('火狐',17)
typ=96 len=4: bb,f0,ba,fc
sql> select dump(1,17) from dual;
dump(1,17)
typ=2 len=2: c1,^b
sql> select dump('火狐',17,1,1) from dual;
dump('火狐',17,1
typ=96 len=4: bb
sql> select dump('火狐',17,1,2) from dual;
dump('火狐',17,1,2)
typ=96 len=4: bb,f0
其次,了解一下number型別資料在dump是如何處理的。
number型資料經dump函式處理以後,輸出格式如下:
type=2 len=×××:符號/指數字, [數字1,數字2,數字3,. . . ,數字20]
type=2 :表示number型別
注意:如果是負數,且總長度小於21個位元組,最後加乙個102(是為了排序的需要)
dump(number,10)是以指數的方式處理的
正數: 符號/指數字 > 128
計算公式:
指數=符號/指數字(第一位元組)-193, 設 n為指數
數值1 = (數字1-1)*100^(n-0)
數值2 = (數字2-1)*100^(n-1)
數值20 = (數字20-1)*100^(n-19)
number數值 sum(數值1,數值2,數值3,. . . , 數值20)
負數:符號/指數字 < 128
指數=62-符號/指數字(第一位元組),設 n為指數
數值1 = (101-數字1)*100^(n-0)
數值2 = (101-數字2)*100^(n-1)
數值20 = (101-數字20)*100^(n-19)
number數值 sum(數值1,數值2,數值3,. . . , 數值20)
0是區分正數和負數的分割點,0既不屬於正數也不屬於負數
0的以10進製方式dump出來的資訊如下:
sql> select dump(0) from dual;
dump(0)
typ=2 len=1: 128
根據上面的資訊,我們可以計算得到16進製制的dump資訊應該是0x80,轉換成二進位制為1000 0000,正好是是乙個位元組編碼最大值的一半。
以根據上面正數和負數的公式,我們計算以下數值的10和16進製制的dump資訊:
1)、150 2)、34.33 3)、-140 4)、 -333.99
第1)解題步驟:
150=100+50=100^1+ 50 ,
故根據上述,應該可以初步確認,150 dump函式輸出格式:
type=2 len=3: 符號/指數字(第一位元組),數字1,數字2
指數=符號/指數字(第一位元組)-193 ,符號/指數字(第一位元組)=194
100 ^1=(數字1-1)*100^(1-0)=(數字1-1)*100
數字1-1=1 ===> 數字1 = 2
50=(數字2-1)*100^(1-1)= (數字2-1)*1
數字2-1=50 ===> 數字2 = 51
150的dump函式10進製輸出為: type=2 len=3: 194, 2, 51
根據上面,10進製194, 2, 51轉換為16進製制,則dump函式16進製為:
type=2 len=3: c2, 2, 33
oracle sql確認:
sql> select dump(150) from dual;
dump(150)
typ=2 len=3: 194,2,51
sql> select dump(150,16) from dual;
dump(150,16)
typ=2 len=3: c2,2,33
sql>
第2)解題步驟:
33.33=33+0.33= (數字1-1)*100^(n-0)+ (數字2-1)*100^(n-1)
可以初步確認,33.33 dump函式輸出格式:
type=2 len=3: 符號/指數字(第一位元組),數字1,數字2
33 < 100 ===> 33 < 100^1 ===> n = 0
符號/指數字(第一位元組)= 193
(數字1-1)*100^0=33 ===> 數字1=34
(數字2-1)*100^(0-1)=0.33 ===> 數字2-1 = 33 ===> 數字2=34
33.33的dump函式10進製輸出為: type=2 len=3: 193, 34, 34
16進製制輸出格式:type=2 len=3: c1, 22, 22
oracle sql確認:
sql> select dump(33.33,16) from dual;
dump(33.33,16)
typ=2 len=3: c1,22,22
sql> select dump(33.33) from dual;
dump(33.33)
typ=2 len=3: 193,34,34
第3題忽略不做……
第4)解題步驟:
-333.99=-(300+33+0.99)=-(3*100^1+33+0.99)
是負數可以初步確認,-333.99 dump函式輸出格式:
type=2 len=5: 符號/指數字(第一位元組),數字1,數字2,數字3 , 120
指數=62-符號/指數字(第一位元組), 數字1上的指數是1 ,n=1
故 1=62-符號/指數字(第一位元組) ===> 符號/指數字(第一位元組)=61
3*100^1 = (101-數字1)*100^(n-0)= (101-數字1)*100^1 ===> 3 = (101-數字1)
數字1=98
33=(101-數字2)*100^(1-1) ===> 33= (101-數字2)
數字2=68
0.99==(101-數字3)*100^(1-2) ===> 0.99= (101-數字3)*100^-1
數字3 = 2
-333.99的dump函式10進製輸出為: type=2 len=5: 61, 98, 68, 2,102
16進製制輸出格式:type=2 len=5: 3d, 62, 44,2,66
oracle sql確認:
sql> select dump(-333.99) from dual;
dump(-333.99)
typ=2 len=5: 61,98,68,2,102
sql> select dump(-333.99,16) from dual;
dump(-333.99,16)
typ=2 len=5: 3d,62,44,2,66
通過Oracle DUMP 檔案獲取表的建立語句
1.有了dump檔案之後 想獲取表的建立語句.之前一直不知道 dump檔案能夠直接解析檔案.今天學習了下 需要的材料.dump檔案,dump檔案對應的schema和使用者.以及乙個版本合適的oracle伺服器.2.使用方法.將dump放到directory 的目錄內.然後執行命令 impdp lcp...
Oracle dump檔案的一些經驗
dump檔案對於dba而言再平常不過了。不過因為dump檔案是二進位制檔案,我們平時使用中不太關注。再匯入dump檔案時有很多細節和技巧是值得注意的。1.檢視dump檔案的一些基本資訊 strings 2018 3 20 bak.dmp head 10 texport v11.02.00 dtest...
Python 初始函式
函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段。函式能提高應用的模組性,和 的重複利用率。你已經知道python提供了許多內建函式,比如print 但你也可以自己建立函式,這被叫做使用者自定義函式。函式的定義 函式在定義階段,只檢測語法,不執行 def 函式名 引數1引數2,注釋資訊...