电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Oracle使用ANYDATA列對數(shù)據(jù)串行化方法

瀏覽:3日期:2023-11-13 10:10:45
Oracle版本9提供了一種有趣的新的數(shù)據(jù)類型,開發(fā)人員借助此類型可以聲明包括任何類型數(shù)據(jù)的變量。對于單個數(shù)據(jù)來說,此數(shù)據(jù)類型即ANYDATA。對于TABLE或者VARRAY數(shù)據(jù)來說,則為ANYDATASET。ANYTYPE用于描述存儲在ANYDATA或者ANYDATASET變量以及欄中的數(shù)據(jù)類型。這些數(shù)據(jù)類型對于處理存儲在數(shù)據(jù)庫中的XML數(shù)據(jù)或高級序列(Advanced Queues)具有非常重要的意義。說明文檔中提到了ANYDATA數(shù)據(jù)類型可以用于對對象進(jìn)行串行化(serialize),但與之相關(guān)的示例較少。 串行化首先將數(shù)據(jù)值和其他結(jié)構(gòu)(strUCture)組成為另外一些結(jié)構(gòu),然后將生成的結(jié)構(gòu)的所有構(gòu)成成分輸出為流。流可以被結(jié)構(gòu)返回讀取,并且將覆蓋前一個會話的信息。通常而言,在應(yīng)用程序中進(jìn)行的保存和打開文件的操作即不過是串行化的一種形式。 一個Oracle數(shù)據(jù)庫或許需要使用串行化功能來存儲一些表格數(shù)據(jù)的某個版本備份,這樣可以在不使用數(shù)據(jù)庫提交(commits)、回滾(rollbacks)、回閃(flashback)查詢的情況下對數(shù)據(jù)進(jìn)行查看和其他操作。許多應(yīng)用程序都會用到類似的對數(shù)據(jù)源的控制功能,諸如可以在應(yīng)用級對當(dāng)前和以前的數(shù)據(jù)版本進(jìn)行比較,或?qū)喜⒉僮鳎╩erge)和撤銷操作(undo)所產(chǎn)生數(shù)據(jù)改變進(jìn)行比較。很多此類應(yīng)用程序都被設(shè)計(jì)為對每個表格創(chuàng)建一個備份表格。而對于數(shù)據(jù)庫性能和開發(fā)進(jìn)度來說,要維護(hù)這些眾多的備份表格以及之間的各種關(guān)系,成為了生產(chǎn)數(shù)據(jù)(production data)以外的沉重負(fù)擔(dān)。 而通過ANYDATA數(shù)據(jù)類型以及動態(tài)SQL功能,使得通過單一的串行化存儲進(jìn)程來把許多需要備份的表格串行輸入到一個單獨(dú)的備份表格成為可能。ANYDATA的一個優(yōu)勢在于,不同于類似VARCHAR2的簡單的轉(zhuǎn)換數(shù)據(jù)類型,使用ANYDATA方法原始的數(shù)據(jù)類型并不會丟失。數(shù)據(jù)可以被存儲在ANYDATA欄或者變量中而不會丟失任何細(xì)節(jié)(或根據(jù)在DATA和VARCHAR2之間進(jìn)行轉(zhuǎn)換的當(dāng)前NLS語義而定)。這些存儲的數(shù)據(jù)在轉(zhuǎn)化過程中不會有任何損失。 一個ANYDATA對象可以通過使用任何Convert*方法構(gòu)造簡單值的方法來實(shí)現(xiàn),或者通過“piecewise”構(gòu)造方法創(chuàng)建諸如對象和數(shù)據(jù)庫一類的更為復(fù)雜的變量。對于本例而言,我將集中解釋如何使用Convert*方法。 為了創(chuàng)建一個串行化進(jìn)程,我使用了動態(tài)SQL來產(chǎn)生一個對表格中所有數(shù)據(jù)的查詢命令,其中包括ROWID。然后我將查詢命令進(jìn)行分解并描述,從而得到一個關(guān)于欄和數(shù)據(jù)類型的列表。再定義提取(fetch)出欄,將每一欄從各行中提取出來,然后將其插入到串行化表格中。在本例中我使用了DBMS_SQL,因?yàn)椤白陨韯討B(tài)SQL(native dynamic SQL)”現(xiàn)在還不能支持描述動態(tài)查詢。絕大多數(shù)的工作都是對從DBMS_SQL數(shù)據(jù)類型代碼到合適的數(shù)據(jù)類型方法以及函數(shù)的轉(zhuǎn)換過程進(jìn)行處理。要得到這些代碼的列表,可以查看OCI包含文件ocidfn.h,或者是諸如USER_TAB_COLUMNS這樣的對查看(view)的定義。在本例中,我使用了簡單的數(shù)據(jù)類型(可以在EMP和DEPT表格中找到),這樣可以直接對其進(jìn)行轉(zhuǎn)換。 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)isl_tablename varchar2(30) := upper(p_tablename);c  pls_integer;-- cursorx  pls_integer;-- dummycol_cnt pls_integer;dtabdbms_sql.desc_tab;l_rowid char(18);l_anydata  anydata;l_vc2  varchar2(32767);l_numbernumber;l_vcvarchar(32767);l_date date;l_raw  raw(32767);l_chchar;l_clob clob;l_blob blob;l_bfile bfile;beginc := 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 loopcase dtab(i).col_typewhen 1 thendbms_sql.define_column(c,i,l_vc2,dtab(i).col_max_len);when 2 thendbms_sql.define_column(c,i,l_number);when 9 thendbms_sql.define_column(c,i,l_vc,dtab(i).col_max_len);when 12 thendbms_sql.define_column(c,i,l_date);when 23 thendbms_sql.define_column_raw(c,i,l_raw,dtab(i).col_max_len);when 96 thendbms_sql.define_column_char(c,i,l_ch,dtab(i).col_max_len);when 112 thendbms_sql.define_column(c,i,l_clob);when 113 thendbms_sql.define_column(c,i,l_blob);when 114 thendbms_sql.define_column(c,i,l_bfile);end case;end loop;x := dbms_sql.execute(c);while dbms_sql.fetch_rows(c) != 0 loopdbms_sql.column_value(c,1,l_rowid);for i in 2 .. col_cnt loopcase dtab(i).col_typewhen 1 thendbms_sql.column_value(c,i,l_vc2);l_anydata := ANYDATA.ConvertVarchar2(l_vc2);when 2 thendbms_sql.column_value(c,i,l_number);l_anydata := ANYDATA.ConvertNumber(l_number);when 9 thendbms_sql.column_value(c,i,l_vc);l_anydata := ANYDATA.ConvertVarchar(l_vc);when 12 thendbms_sql.column_value(c,i,l_date);l_anydata := ANYDATA.ConvertDate(l_date);when 23 thendbms_sql.column_value(c,i,l_raw);l_anydata := ANYDATA.ConvertRaw(l_raw);when 96 thendbms_sql.column_value(c,i,l_ch);l_anydata := ANYDATA.ConvertChar(l_ch);when 112 thendbms_sql.column_value(c,i,l_clob);l_anydata := ANYDATA.ConvertClob(l_clob);when 113 thendbms_sql.column_value(c,i,l_blob);l_anydata := ANYDATA.ConvertBlob(l_blob);when 114 thendbms_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恢復(fù)過來。表格數(shù)據(jù)必須使用PL/SQL過程進(jìn)行訪問。
標(biāo)簽: Oracle 數(shù)據(jù)庫
主站蜘蛛池模板: 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 | 酶联免疫分析仪-多管旋涡混合仪|混合器-莱普特科学仪器(北京)有限公司 | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 花纹铝板,合金铝卷板,阴极铝板-济南恒诚铝业有限公司 | 天助网 - 中小企业全网推广平台_生态整合营销知名服务商_天助网采购优选 | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 精准猎取科技资讯,高效阅读科技新闻_科技猎 | 压缩空气冷冻式干燥机_吸附式干燥机_吸干机_沪盛冷干机 | 精密模具加工制造 - 富东懿 | 防渗膜厂家|养殖防渗膜|水产养殖防渗膜-泰安佳路通工程材料有限公司 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | YT保温材料_YT无机保温砂浆_外墙保温材料_南阳银通节能建材高新技术开发有限公司 | 济南宣传册设计-画册设计_济南莫都品牌设计公司| 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 微动开关厂家-东莞市德沃电子科技有限公司 | 3D全息投影_地面互动投影_360度立体投影_水幕灯光秀 | 广东银虎 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | 吉林污水处理公司,长春工业污水处理设备,净水设备-长春易洁环保科技有限公司 | 阿尔法-MDR2000无转子硫化仪-STM566 SATRA拉力试验机-青岛阿尔法仪器有限公司 | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 釜溪印象网络 - Powered by Discuz! | 发光字|标识设计|标牌制作|精神堡垒 - 江苏苏通广告有限公司 | 24位ADC|8位MCU-芯易德科技有限公司 | 专注提供国外机电设备及配件-工业控制领域一站式服务商-深圳市华联欧国际贸易有限公司 | 包塑软管|金属软管|包塑金属软管-闵彬管业| 厦门网站建设_厦门网站设计_小程序开发_网站制作公司【麦格科技】 | 篷房|仓储篷房|铝合金篷房|体育篷房|篷房厂家-华烨建筑科技官网 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 环境模拟实验室_液体-气体控温机_气体控温箱_无锡双润冷却科技有限公司 | 天津云仓-天津仓储物流-天津云仓一件代发-顺东云仓 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 |