资源描述:
《元数据在oracle中的应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、元数据在Oracle中的应用曾创能基本概念什么是元数据(MetaData)关于“数据”的“数据”(DataAboutData)e.g.数据源类型和位置,数据的物理存储结构,企业基础数据元数据应用范围EAI,BI,OLTPOLTP中的一个问题问题提出xx系统中的一个需求:记录重要表变动日志分别记录重要表记录变更(增加、修改、删除)前后的各字段值。格式例如:交易日期,结算组代码,结算编号,银行代码,银行名称,操作人员,操作时间20080318,00000001,1,3,农业银行,sys,10:30:31
2、20080318,00000001,1,3,中国农业银行,marmot,13:01:10如何解决?传统方法:1.构造字段中文名称字符串(hardcode),例如“交易日期,结算组代码,结算编号,…”2.在进行更新(insert,update,delete)前,通过id查询出变更前的记录的各字段的值;3.在更新后,通过id查询出变更后的记录的各字段的值;4.组装成最后的日志记录字符串。OLTP中的元数据如何解决?引入元数据1.增加两张表,用来存放表以及表结构的数据createtablet_MetaDa
3、taTables(TableCodechar(32)notnull,TableNamechar(64)notnull,countnumber(8),Notevarchar2(500),AllowOutnumber(1)notnull,AllowInnumber(1)notnull,SchemaIDchar(32)notnullcreatetablet_MetaDataColumns(TableCodechar(32)notnull,ColumnCodechar(32)notnull,ColumnNa
4、mechar(32)notnull,ColumnTypechar(32),IsKeynumber(1)notnull,SchemaIDchar(32)notnull,constraintpk_MetaDataColumnsprimarykey(TableCode,ColumnCode,SchemaID));OLTP中的元数据(接上页)2.在t_MetaDataColumns中查出t_log_tab(重要表变动日志)的所有字段英文名和中文名3.将中文字段名组成字符串(将作为日志信息的列标题行)4.将英
5、文名按逗号分隔,然后拼装成select语句,动态执行后,得到变更前该记录所有字段的值5.在变更后,同上步,得到变更后该记录的所有字段的值OLTP中的元数据比较传统方法比较直接,无须借助其他表元数据方法需借助元数据表传统方法是硬编码,针对每一个重要日志表,都必须重新写一段代码元数据方法可以封装成一个公共的记录日志的过程,只需传入表名和ID即可如何利用元数据解决问题记录复核日志up_SetChgLogForChkPROCEDUREup_SetChgLogForChk(o_RetCodeOUTINT,o_
6、RetMsgOUTVARCHAR2,i_SettlementGroupIDINt_MemberEx.SettlementGroupID%TYPE,i_TableCodeINCHAR,--正式表英文名i_idINNUMBER,i_OperatorIDINt_sys_status.OperatorID%TYPE,i_OperationTypeINt_log_tab.operator_type%TYPE,--'增加'、'修改'、'删除',i_CheckTableCodeINCHARDEFAULTNULL-
7、-复核表英文名)如何利用元数据解决问题修改明细对比up_Compare/*功能:通用的复核比较处理:1.通过t_MetaDataColumns表,获取正式表和复核表分别有哪些字段以及字段的中英文名;2.通过构造两个动用SQL,实现分别从复核表和正式表查询出两条数据,数据以"$"分割;3.解析上步中的数据,并且结合第1步获取的字段中文名,构造临时表tmp_CheckCompareResult的数据;tmp_CheckCompareResult的字段如下:ChnColNameVARCHAR2(255)O
8、riginValueVARCHAR2(500)NewValueVARCHAR2(500)4.从临时表tmp_CheckCompareResult中查询,并返回cursor。*/PROCEDUREup_CheckCompare(i_IDINT_TBM_B_LINK_CHECK.ID%TYPE,i_TableCodeINCHAR,i_CheckTableCodeINCHAR,o_RetCodeOUTINT,o_RetMsgOUTVARCHAR2,o_RetCursorOU