资源描述
元数据在Oracle中的应用曾创能基本概念什么是元数据(MetaData)关于“数据”的“数据”(Data About Data)e.g.数据源类型和位置,数据的物理存储结构,企业基础数据元数据应用范围 EAI,BI,OLTPOLTP中的一个问题问题提出 xx系统中的一个需求:记录重要表变动日志 分别记录重要表记录变更(增加、修改、删除)前后的各字段值。格式例如:交易日期,结算组代码,结算编号,银行代码,银行名称,操作人员,操作时间 20080318,00000001,1 ,3 ,农业银行,sys,10:30:31 20080318,00000001,1 ,3 ,中国农业银行,marmot,13:01:10如何解决?传统方法:1.构造 字段中文名称字符串(hard code),例如“交易日期,结算组代码,结算编号,”2.在进行更新(insert,update,delete)前,通过id查询出变更前的记录的各字段的值;3.在更新后,通过id查询出变更后的记录的各字段的值;4.组装成最后的日志记录字符串。OLTP中的元数据如何解决?引入元数据引入元数据 1.增加两张表,用来存放表以及表结构的数据create table t_MetaDataTablest_MetaDataTables(TableCode char(32)not null,TableName char(64)not null,count number(8),Note varchar2(500),AllowOut number(1)not null,AllowIn number(1)not null,SchemaID char(32)not null create table t_MetaDataColumnst_MetaDataColumns(TableCode char(32)not null,ColumnCode char(32)not null,ColumnName char(32)not null,ColumnType char(32),IsKey number(1)not null,SchemaID char(32)not null,constraint pk_MetaDataColumns primary key(TableCode,ColumnCode,SchemaID);OLTP中的元数据(接上页)2.在t_MetaDataColumns中查出t_log_tab(重要表变动日志)的所有字段英文名和中文名 3.将中文字段名组成字符串(将作为日志信息的列标题行)4.将英文名按逗号分隔,然后拼装成select语句,动态执行后,得到变更前该记录所有字段的值 5.在变更后,同上步,得到变更后该记录的所有字段的值OLTP中的元数据比较 传统方法比较直接,无须借助其他表 元数据方法需借助元数据表传统方法是硬编码,针对每一个重要日志表,都必须重新写一段代码元数据方法可以封装成一个公共的记录日志的过程,只需传入表名和ID即可 如何利用元数据解决问题记录复核日志记录复核日志up_SetChgLogForChkup_SetChgLogForChk PROCEDURE up_SetChgLogForChk(o_RetCode OUT INT,o_RetMsg OUT VARCHAR2,i_SettlementGroupID IN t_MemberEx.SettlementGroupID%TYPE,i_TableCode IN CHAR,-正式表英文名 i_id IN NUMBER,i_OperatorID IN t_sys_status.OperatorID%TYPE,i_OperationType IN t_log_tab.operator_type%TYPE,-增加、修改、删除,i_CheckTableCode IN CHAR DEFAULT NULL-复核表英文名 )如何利用元数据解决问题修改明细对比修改明细对比u up_Comparep_Compare/*功能:通用的复核比较 处理:1.通过t_MetaDataColumns表,获取正式表和复核表分别有哪些字段以及字段的中英文名;2.通过构造两个动用SQL,实现分别从复核表和正式表查询出两条数据,数据以$分割;3.解析上步中的数据,并且结合第1步获取的字段中文名,构造临时表tmp_CheckCompareResult的数据;tmp_CheckCompareResult 的字段如下:ChnColName VARCHAR2(255)OriginValue VARCHAR2(500)NewValue VARCHAR2(500)4.从临时表tmp_CheckCompareResult中查询,并返回cursor。*/PROCEDURE up_CheckCompare(i_ID IN T_TBM_B_LINK_CHECK.ID%TYPE,i_TableCode IN CHAR,i_CheckTableCode IN CHAR,o_RetCode OUT INT,o_RetMsg OUT VARCHAR2,o_RetCursor OUT Sys_RefCursor )如何利用元数据解决问题复核回退up_Reject/*功能:通用的复核退回功能 处理:1.判断当前状态是否能进行复核退回操作 2.判断该记录是否在复核表中存在 3.判断复核员与操作员是否为同一人 4.修改复核表记录,置复核状态为已退回状态,并写入退回理由*/PROCEDURE up_CheckReject(i_ID IN T_TBM_B_LINK_CHECK.ID%TYPE,i_Checker IN t_sysparam.CheckerID%TYPE,i_CheckRemark IN T_TBM_B_LINK_CHECK.CheckRemark%TYPE,i_CheckTable IN VARCHAR2,i_status IN VARCHAR2 DEFAULT common,o_RetCode OUT INT,o_RetMsg OUT VARCHAR2 )IS 如何利用元数据解决问题数据迁移Data migration up_ExportData(i_TableName IN CHAR,i_SchemaName IN VARCHAR2 DEFAULT CURRSPECPARTSETTLEMENT,i_BeginDate IN CHAR DEFAULT ,i_EndDate IN CHAR DEFAULT )还有哪些应用?谢谢,欢迎提问谢谢,欢迎提问联系人:曾创能 021-68400767
展开阅读全文