初始ORACLE DUMP 函式

2021-06-07 04:15:35 字數 4711 閱讀 9147

環境:

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,注釋資訊...