DUMPの使い方

2532 ワード

DUMP():テーブルにdatafileにリストされている格納内容を表示します.exprの内部表示情報を含むvarchar 2値が返されます.
DUMP関数の出力形式は似ています.
タイプ<[長さ]>,記号/指数ビット[数字1,数字2,数字3,...,数字20]
DUMP(expr[,number_format[,start_position][,length]]) 
皆さんの意味は以下の通りです.
1.タイプ:Numberタイプ、Type=2(タイプコードはOracleのドキュメントから確認できます)
Date(長さ7タイプ12)
2.長さ:格納バイト数
3.シンボル/インデックスビット
「≪記憶域|Storage|Essbase_Studio≫」で、Oracleは正数と負数をそれぞれ記憶変換します.
正数:プラス1ストレージ(Nullを避けるため)
負数:101で減算され、合計長さが21バイト未満の場合、最後に102が加算されます(ソートのために必要です).
インデックス変換:
正数:指数=記号/指数ビット-193(最上位1は正数を表す)
負数:指数=62-1バイト目
4.<数字1>から有効なデータビット
<数値1>から最大有効ビットであり、格納された数値計算方法は以下のとおりである.
次の計算結果を加算します.
各<デジタルビット>に100^(指数-N)を乗じる(Nは有効ビット数のシーケンスビットであり、最初の有効ビットのN=0)
1.numberタイプのバイトストリームは不定長であり、正負数は異なるフラグビットである(正数:数字1>=193、負数:数字1<=62、差額はちょうど指数サイズである)
2.charは一定長で、長さが最大長に満たないと尾スペースが充填され、varcharは不定長(すなわち、長さをどれだけ残すか)
3.dateタイプは長さを決め、8バイトを占める
NUMBER
SQL> select dump(123456.789) from dual;
 
DUMP(123456.789)
-------------------------------
Typ=2 Len=6: 195,13,35,57,79,91
<指数>:195-193=2
<数字1>13-1=12*100^(2-0)120000
<数字2>35-1=34*100^(2-1)3400
<数字3>57-1=56*100^(2-2)56
<数字4>79-1=78*100^(2-3).78
<数値5>91-1=90*100^(2-4).09
                             123456.789
SQL> select dump(-123456.789) from dual;
DUMP(-123456.789)
----------------------------------
Typ=2 Len=7: 60,89,67,45,23,11,102 

<指数>62-60=2(最上位は0で負を表す)
<数字1>101-89=12*100^(2-0)120000
<数字2>101-67=34*100^(2-1)3400
<数字3>101-45=56*100^(2-2)56
<数字4>101-23=78*100^(2-3).78
<数値5>101-11=90*100^(2-4).09
                               123456.789(-)
------------------------------------------------------------
Date(長さ7タイプ12)
SQL> select dump(last_ddl_time) dump_date, to_char(last_ddl_time,'yyyy-mm-dd hh24:mi:ss') real_date
from user_objects
where rownum=1;

DUMP_DATE                                                                        REAL_DATE
-------------------------------------------------------------------------------- -------------------
Typ=12 Len=7: 120,108,12,24,18,26,29                                             2008-12-24 17:25:28
世紀120-100=20世紀と年に100を加えたストレージ
年108~100=8
月12月と日付を元の値で保存
日付24
時間18~1=17時間に1を加算して保存
分26~1=25
秒29~1=28