亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle使用ANYDATA列對數據串行化方法

2024-08-29 13:50:45
字體:
來源:轉載
供稿:網友
Oracle版本9提供了一種有趣的新的數據類型,開發人員借助此類型可以聲明包括任何類型數據的變量。對于單個數據來說,此數據類型即ANYDATA。對于TABLE或者VARRAY數據來說,則為ANYDATASET。ANYTYPE用于描述存儲在ANYDATA或者ANYDATASET變量以及欄中的數據類型。這些數據類型對于處理存儲在數據庫中的xml數據或高級序列(Advanced Queues)具有非常重要的意義。說明文檔中提到了ANYDATA數據類型可以用于對對象進行串行化(serialize),但與之相關的示例較少。 串行化首先將數據值和其他結構(strUCture)組成為另外一些結構,然后將生成的結構的所有構成成分輸出為流。流可以被結構返回讀取,并且將覆蓋前一個會話的信息。通常而言,在應用程序中進行的保存和打開文件的操作即不過是串行化的一種形式。 一個Oracle數據庫或許需要使用串行化功能來存儲一些表格數據的某個版本備份,這樣可以在不使用數據庫提交(commits)、回滾(rollbacks)、回閃(Flashback)查詢的情況下對數據進行查看和其他操作。許多應用程序都會用到類似的對數據源的控制功能,諸如可以在應用級對當前和以前的數據版本進行比較,或對合并操作(merge)和撤銷操作(undo)所產生數據改變進行比較。很多此類應用程序都被設計為對每個表格創建一個備份表格。而對于數據庫性能和開發進度來說,要維護這些眾多的備份表格以及之間的各種關系,成為了生產數據(PRoduction data)以外的沉重負擔。 而通過ANYDATA數據類型以及動態SQL功能,使得通過單一的串行化存儲進程來把許多需要備份的表格串行輸入到一個單獨的備份表格成為可能。ANYDATA的一個優勢在于,不同于類似VARCHAR2的簡單的轉換數據類型,使用ANYDATA方法原始的數據類型并不會丟失。數據可以被存儲在ANYDATA欄或者變量中而不會丟失任何細節(或根據在DATA和VARCHAR2之間進行轉換的當前NLS語義而定)。這些存儲的數據在轉化過程中不會有任何損失。 一個ANYDATA對象可以通過使用任何Convert*方法構造簡單值的方法來實現,或者通過“piecewise”構造方法創建諸如對象和數據庫一類的更為復雜的變量。對于本例而言,我將集中解釋如何使用Convert*方法。 為了創建一個串行化進程,我使用了動態SQL來產生一個對表格中所有數據的查詢命令,其中包括ROWID。然后我將查詢命令進行分解并描述,從而得到一個關于欄和數據類型的列表。再定義提?。╢etch)出欄,將每一欄從各行中提取出來,然后將其插入到串行化表格中。在本例中我使用了DBMS_SQL,因為“自身動態SQL(native dynamic SQL)”現在還不能支持描述動態查詢。絕大多數的工作都是對從DBMS_SQL數據類型代碼到合適的數據類型方法以及函數的轉換過程進行處理。要得到這些代碼的列表,可以查看OCI包含文件ocidfn.h,或者是諸如USER_TAB_COLUMNS這樣的對查看(view)的定義。在本例中,我使用了簡單的數據類型(可以在EMP和DEPT表格中找到),這樣可以直接對其進行轉換。
    drop table serialized_data;    create table serialized_data    (      tablename varchar2(30) not null,      row_id rowid not null,      colseq integer not null,      item anydata    );    create or replace procedure serialize(p_tablename varchar2)    is      l_tablename varchar2(30) := upper(p_tablename);      c      pls_integer;    -- cursor      x      pls_integer;    -- dummy      col_cnt   pls_integer;      dtab    dbms_sql.desc_tab;      l_rowid   char(18);      l_anydata  anydata;      l_vc2    varchar2(32767);      l_number  number;      l_vc    varchar(32767);      l_date   date;      l_raw    raw(32767);      l_ch    char;      l_clob   clob;      l_blob   blob;      l_bfile   bfile;    begin      c := dbms_sql.open_cursor;      dbms_sql.parse(c,'select rowid,'p_tablename'.* from 'p_tablename,        dbms_sql.native);      dbms_sql.describe_columns(c,col_cnt,dtab);      dbms_sql.define_column(c,1,l_rowid,18);      for i in 2 .. col_cnt loop        case dtab(i).col_type        when 1 then          dbms_sql.define_column(c,i,l_vc2,dtab(i).col_max_len);        when 2 then          dbms_sql.define_column(c,i,l_number);        when 9 then          dbms_sql.define_column(c,i,l_vc,dtab(i).col_max_len);        when 12 then          dbms_sql.define_column(c,i,l_date);        when 23 then          dbms_sql.define_column_raw(c,i,l_raw,dtab(i).col_max_len);        when 96 then          dbms_sql.define_column_char(c,i,l_ch,dtab(i).col_max_len);        when 112 then          dbms_sql.define_column(c,i,l_clob);        when 113 then          dbms_sql.define_column(c,i,l_blob);        when 114 then          dbms_sql.define_column(c,i,l_bfile);        end case;      end loop;      x := dbms_sql.execute(c);      while dbms_sql.fetch_rows(c) != 0 loop        dbms_sql.column_value(c,1,l_rowid);        for i in 2 .. col_cnt loop          case dtab(i).col_type          when 1 then            dbms_sql.column_value(c,i,l_vc2);            l_anydata := ANYDATA.ConvertVarchar2(l_vc2);          when 2 then            dbms_sql.column_value(c,i,l_number);            l_anydata := ANYDATA.ConvertNumber(l_number);          when 9 then            dbms_sql.column_value(c,i,l_vc);            l_anydata := ANYDATA.ConvertVarchar(l_vc);          when 12 then            dbms_sql.column_value(c,i,l_date);            l_anydata := ANYDATA.ConvertDate(l_date);          when 23 then            dbms_sql.column_value(c,i,l_raw);            l_anydata := ANYDATA.ConvertRaw(l_raw);          when 96 then            dbms_sql.column_value(c,i,l_ch);            l_anydata := ANYDATA.ConvertChar(l_ch);          when 112 then            dbms_sql.column_value(c,i,l_clob);            l_anydata := ANYDATA.ConvertClob(l_clob);          when 113 then            dbms_sql.column_value(c,i,l_blob);            l_anydata := ANYDATA.ConvertBlob(l_blob);          when 114 then            dbms_sql.column_value(c,i,l_bfile);            l_anydata := ANYDATA.ConvertBFile(l_bfile);          end case;          insert into serialized_data (tablename,row_id,colseq,item)            values (l_tablename,l_rowid,i,l_anydata);        end loop;      end loop;      dbms_sql.close_cursor(c);    end;    /    show errors;
   假如我希望對“EMP”和“DEPT”表格串行化,我可以按照以下代碼通過SQL*Plus來完成:
    exec serialize('emp');    exec serialize('dept');    select t.item.gettypename() from serialized_data t;
   使用ANYDATA中的一個問題是,假如是對象,則只有很少的信息可以通過直接SQL恢復過來。表格數據必須使用PL/SQL過程進行訪問。


上一篇:關于Oracle服務器性能全面調整攻略

下一篇:Oracle 9i輕松取得建表和索引DDL語句

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美最顶级丰满的aⅴ艳星| 亚洲欧美激情在线视频| 日韩av在线一区二区| 在线观看91久久久久久| 精品久久久久久久久久久| 国产日韩av在线| 麻豆国产va免费精品高清在线| 另类专区欧美制服同性| 欧美一区二区视频97| 久久久久成人网| 亚洲成人动漫在线播放| 91久久嫩草影院一区二区| 91精品久久久久久久久久入口| 97成人精品视频在线观看| 国产成人精品视频| 91久久中文字幕| 国产欧美婷婷中文| 国内精品久久久久影院优| 久久久久久久久久久国产| 亚洲天堂av在线免费观看| 福利一区视频在线观看| 欧美日韩午夜视频在线观看| 国产精品91久久久| 久久九九亚洲综合| 亚洲人线精品午夜| 美日韩精品免费观看视频| 亚洲热线99精品视频| 亚洲一区二区三| 欧美色videos| 久久福利网址导航| 欧美一区二区三区免费视| 疯狂做受xxxx高潮欧美日本| 欧美美女18p| 4p变态网欧美系列| 亚洲欧美制服综合另类| 日韩av片电影专区| 亚洲福利在线视频| 欧美精品videosex极品1| 日韩电视剧在线观看免费网站| 亚洲欧美日韩中文在线制服| 国产成人精品在线播放| 中文字幕久热精品视频在线| 国产精品第七十二页| 亚洲摸下面视频| 欧美精品日韩www.p站| 成人在线一区二区| 久久久久中文字幕2018| 成人黄色av免费在线观看| 亚洲精品色婷婷福利天堂| 91久久嫩草影院一区二区| 欧美日本精品在线| 国产91热爆ts人妖在线| 26uuu亚洲伊人春色| 亚洲天堂影视av| 国产91精品青草社区| 日韩高清av一区二区三区| 韩曰欧美视频免费观看| 亚洲天堂影视av| 日本不卡高字幕在线2019| 久久精品一区中文字幕| 成人免费xxxxx在线观看| 国产精品免费观看在线| 欧美性猛交xxxxx水多| 热99精品只有里视频精品| 久久久女女女女999久久| 在线电影av不卡网址| 亚洲天堂av图片| 97成人精品视频在线观看| 久久久极品av| 亚洲影院色在线观看免费| 久久综合久中文字幕青草| 亚洲国产天堂久久国产91| 国产精品www色诱视频| 亚洲网在线观看| 91精品国产色综合久久不卡98口| 亚洲成人a级网| 久久久精品美女| 亚洲视频在线视频| 久久中文字幕视频| 亚洲а∨天堂久久精品喷水| 色狠狠av一区二区三区香蕉蜜桃| 久久69精品久久久久久久电影好| 黑人精品xxx一区一二区| 亚洲久久久久久久久久久| 欧美一级电影免费在线观看| 国产精品18久久久久久首页狼| 欧美日韩福利在线观看| 日韩中文综合网| 九九视频直播综合网| 欧美日韩午夜视频在线观看| 色噜噜狠狠狠综合曰曰曰88av| 92版电视剧仙鹤神针在线观看| 九九九久久久久久| 8090成年在线看片午夜| 秋霞成人午夜鲁丝一区二区三区| 精品无人国产偷自产在线| 97色在线视频| 伊人一区二区三区久久精品| 日韩av一区二区在线观看| 国产精品爽爽ⅴa在线观看| 欧美成人中文字幕在线| 夜夜嗨av色综合久久久综合网| 午夜伦理精品一区| 岛国av一区二区三区| 91精品美女在线| 97在线观看视频| 亚洲欧美一区二区三区四区| 中文字幕国产精品| 亚洲国产97在线精品一区| 国内精品一区二区三区四区| 91av视频在线免费观看| 久久人人爽人人爽人人片av高请| 在线播放国产一区二区三区| 欧美日韩美女在线| 欧美夫妻性生活xx| 亚洲综合色激情五月| 久久99视频精品| 青青草成人在线| 国产精品一区电影| 色狠狠av一区二区三区香蕉蜜桃| 亚洲欧美日韩天堂一区二区| 久久精品夜夜夜夜夜久久| 日韩成人激情影院| 国产精品扒开腿做| 亚洲偷欧美偷国内偷| 亚洲一品av免费观看| 成人深夜直播免费观看| 97人人模人人爽人人喊中文字| 日韩av在线免播放器| 国产精品一区二区电影| 久久精品人人做人人爽| 久久久久久999| 欧美激情女人20p| 欧美精品亚州精品| 欧美在线视频一区二区| 久久精品99久久久久久久久| 97av在线视频免费播放| 国产99视频在线观看| 日本91av在线播放| 亚洲国产精品久久久久| 日韩精品中文字| 久久精品99久久久香蕉| 亚洲男人第一网站| 国产一区视频在线播放| 欧美成人午夜剧场免费观看| 欧美电影免费播放| 91日韩在线视频| 欧美激情免费视频| 国产一区二区在线免费视频| 亚洲黄页网在线观看| 亚洲欧美日韩天堂一区二区| 91国内产香蕉| 久久国产视频网站| 久久精品成人动漫| 亚洲成人a级网| 九九九热精品免费视频观看网站| 国产成人97精品免费看片| 91精品国产91久久久久| 亚洲国模精品一区| 日本午夜精品理论片a级appf发布| 欧美网站在线观看| 精品一区二区三区电影| 久久视频国产精品免费视频在线| 久久影视电视剧凤归四时歌|