Oracel存储过程通用ETL实现.docx

上传人:b****7 文档编号:23309088 上传时间:2023-05-16 格式:DOCX 页数:19 大小:18.41KB
下载 相关 举报
Oracel存储过程通用ETL实现.docx_第1页
第1页 / 共19页
Oracel存储过程通用ETL实现.docx_第2页
第2页 / 共19页
Oracel存储过程通用ETL实现.docx_第3页
第3页 / 共19页
Oracel存储过程通用ETL实现.docx_第4页
第4页 / 共19页
Oracel存储过程通用ETL实现.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Oracel存储过程通用ETL实现.docx

《Oracel存储过程通用ETL实现.docx》由会员分享,可在线阅读,更多相关《Oracel存储过程通用ETL实现.docx(19页珍藏版)》请在冰豆网上搜索。

Oracel存储过程通用ETL实现.docx

Oracel存储过程通用ETL实现

Oracel存储过程-通用ETL实现

数据规格化

处理自动化

信息集中化

操作人性化

 

架构

通过视图实现来至两个不同数据库的表的结构完全一致,  在结构完全相同的两个表之间进行数据同步,问题变得相当简单.同步代码如下.

ETL

---初始同步

deletefromods_table;

insertintov_table

select*fromdb_table;

commit;

 

---新增同步

insertintov_table

select*fromdb_tablet

wherenotin(selectidfromv_table);

 

commit;

---变更同步

 

updateods_tablet

set=(selectfromdb_tabledbwhere=

where!

=(selectfromdb_tabledbwhere=;

commit;

 

实现两个表结构完全一致的方法如下

---建表

CREATESEQUENCESEQ_ETL_INCREASE_ID

INCREMENTBY1

STARTWITH1

  NOCACHE;

 

/*==============================================================*/

/*Table:

ETL_TABLES                              */

/*==============================================================*/

CREATETABLEETL_TABLES  (

  "ID"            NUMBER                DEFAULT-1NOTNULL,

  "TABLE_NAME"      VARCHAR2(100)            NOTNULL,

  "TABLE_TYPE"      VARCHAR2(30)              NOTNULL,

  "TABLE_ROOT_IN"    VARCHAR2(30),

  "TABLE_NEED_CREATE_VIEW"NUMBER                DEFAULT1,

  "TABLE_CREATE_VIEW_NAME_PREFIX"VARCHAR2(30)            DEFAULT'v',

  "DB_LINK_NAME"    VARCHAR2(100),

  "CURRENT_VERSION"  NUMBER                DEFAULT1NOTNULL,

  "VERSION_HISTORY"  VARCHAR2(3000)            DEFAULT'initinput'NOTNULL,

  "DEVELOP_DATE"    DATE                  DEFAULTSYSDATENOTNULL,

  "DEVELOP_BY"      VARCHAR2(100)            DEFAULT'cyyan@isoftstone'NOTNULL,

  "LAST_MAINTAIN_DATE"DATE                  DEFAULTSYSDATENOTNULL,

  "LAST_MAINTAIN_BY"  VARCHAR2(100)            DEFAULT'cyyan@isoftstone'NOTNULL,

  "MEMO"          VARCHAR2(500),

  "STATUS"        NUMBER                DEFAULT1,

  CONSTRAINTPK_ETL_TABLESPRIMARYKEY("ID")

);

 

COMMENTONTABLEETL_TABLESIS

'此表用于维护ETL涉及到所有表,包括:

1,db---业务系统数据库

2,ods---操作数据数据库

3,dw---数据仓库';

 

/*==============================================================*/

/*Table:

ETL_VIEWS                              */

/*==============================================================*/

CREATETABLEETL_VIEWS  (

  "ID"            NUMBER                DEFAULT-1NOTNULL,

  "VIEW_NAME"      VARCHAR2(100)            NOTNULL,

  "VIEW_TYPE"      VARCHAR2(30)              NOTNULL,

  "VIEW_ROOT_IN"    VARCHAR2(30),

  "VIEW_SELECT"      VARCHAR2(4000)            NOTNULL,

  "VIEW_FROM"      VARCHAR2(600)            NOTNULL,

  "VIEW_WHERE"      VARCHAR2(2000),

  "VIEW_ORDER_BY"    VARCHAR2(600),

  "VIEW_GROUP_BY"    VARCHAR2(600),

  "VIEW_HAVING"      VARCHAR2(600),

  "VIEW_DB_LINK_NAME"  VARCHAR2(100),

  "CURRENT_VERSION"  NUMBER                DEFAULT1NOTNULL,

  "VERSION_HISTORY"  VARCHAR2(3000)            DEFAULT'initinput'NOTNULL,

  "DEVELOP_DATE"    DATE                  DEFAULTSYSDATENOTNULL,

  "DEVELOP_BY"      VARCHAR2(100)            DEFAULT'cyyan@isoftstone'NOTNULL,

  "LAST_MAINTAIN_DATE"DATE                  DEFAULTSYSDATENOTNULL,

  "LAST_MAINTAIN_BY"  VARCHAR2(100)            DEFAULT'cyyan@isoftstone'NOTNULL,

  "MEMO"          VARCHAR2(500),

  "STATUS"        NUMBER                DEFAULT1,

  CONSTRAINTPK_ETL_VIEWSPRIMARYKEY("ID")

);

 

COMMENTONTABLEETL_VIEWSIS

'此表用于维护ETL涉及到所有视图,包括:

1,v1---db表中与ods对应到视图

2,v2---ods表中与db对应到视图

3,v3---ods表中与dw对应到视图

4,v4---dw表中与ods中对应到视图';

 

/*==============================================================*/

/*Table:

ETLS                                  */

/*==============================================================*/

CREATETABLEETLS  (

  "ID"            NUMBER                  NOTNULL,

  "ETL_NAME"        VARCHAR2(300)            NOTNULL,

  "ETL_TYPE"        VARCHAR2(30)              NOTNULL,

  "ETL_SRC_VIEW_OR_TABLE"NUMBER                  NOTNULL,

  "ETL_DES_VIEW_OR_TABLE"NUMBER                  NOTNULL,

  "ETL_INIT_ENABLE"  NUMBER

(1)              DEFAULT1NOTNULL,

  "ETL_ADD_ENABLE"    NUMBER

(1)              DEFAULT1NOTNULL,

  "ETL_CHARGE_ENABLE"  NUMBER

(1)              DEFAULT1NOTNULL,

  "CURRENT_VERSION"  NUMBER                DEFAULT1NOTNULL,

  "VERSION_HISTORY"  VARCHAR2(3000)            DEFAULT'initinput'NOTNULL,

  "DEVELOP_DATE"    DATE                  DEFAULTSYSDATENOTNULL,

  "DEVELOP_BY"      VARCHAR2(100)            DEFAULT'cyyan@isoftstone'NOTNULL,

  "LAST_MAINTAIN_DATE"DATE                  DEFAULTSYSDATENOTNULL,

  "LAST_MAINTAIN_BY"  VARCHAR2(100)            DEFAULT'cyyan@isoftstone'NOTNULL,

  "MEMO"          VARCHAR2(500),

  "STATUS"        NUMBER                DEFAULT1,

  CONSTRAINTPK_ETLSPRIMARYKEY("ID")

);

 

COMMENTONTABLEETLSIS

'此表用于维护ETL转换时设计到源表和目的表

 

源表(或视图)--->目的表(或视图)-

(推荐全部使用视图,视图具有更过到灵活性,而且更统一)

 

整体架构是在完全相同两张表(或视图)之间进行同步处理

 

规范:

1,  源表(或视图)-和目的表(或视图)-完全相同

2,  目的视图必须是单表';

 

--存储过程

 

/*==============================================================*/

/*Databasename:

  %DATABASE%                        */

/*DBMSname:

    ORACLEVersion10g                  */

/*Createdon:

    2009-2-123:

29:

27                  */

/*==============================================================*/

 

--INTEGRITYPACKAGEDECLARATION

CREATEORREPLACEPACKAGEINTEGRITYPACKAGEAS

PROCEDUREINITNESTLEVEL;

FUNCTIONGETNESTLEVELRETURNNUMBER;

PROCEDURENEXTNESTLEVEL;

PROCEDUREPREVIOUSNESTLEVEL;

ENDINTEGRITYPACKAGE;

/

 

--INTEGRITYPACKAGEDEFINITION

CREATEORREPLACEPACKAGEBODYINTEGRITYPACKAGEAS

NESTLEVELNUMBER;

 

--PROCEDURETOINITIALIZETHETRIGGERNESTLEVEL

PROCEDUREINITNESTLEVELIS

BEGIN

NESTLEVEL:

=0;

END;

 

--FUNCTIONTORETURNTHETRIGGERNESTLEVEL

FUNCTIONGETNESTLEVELRETURNNUMBERIS

BEGIN

IFNESTLEVELISNULLTHEN

    NESTLEVEL:

=0;

ENDIF;

RETURN(NESTLEVEL);

END;

 

--PROCEDURETOINCREASETHETRIGGERNESTLEVEL

PROCEDURENEXTNESTLEVELIS

BEGIN

IFNESTLEVELISNULLTHEN

    NESTLEVEL:

=0;

ENDIF;

NESTLEVEL:

=NESTLEVEL+1;

END;

 

--PROCEDURETODECREASETHETRIGGERNESTLEVEL

PROCEDUREPREVIOUSNESTLEVELIS

BEGIN

NESTLEVEL:

=NESTLEVEL-1;

END;

 

ENDINTEGRITYPACKAGE;

/

 

CREATEORREPLACEPROCEDUREPRO_CREATE_VIEW_BY_ETL_VIEWS

AS

 

--------------PRO_CREATE_VIEW_BY_ETL_VIEWS------------------------

--CREATEDON2009-2-1BYCYYAN@ISOFTSTONE

--功能:

根据ETL_VIEWS中到数据生成视图

------------------------------------------------------------------------------

 

  VIEW_CREATE_CODEVARCHAR2(10000);--生成视图到代码

 

  VIEW_NAMEVARCHAR2(100);  --视图名称

 

  VIEW_SELECTVARCHAR2(4000);  --视图的SELECT部分

  VIEW_FROMVARCHAR2(300);  --视图的FROM部分

  VIEW_WHEREVARCHAR2(3000);  --视图的WHERE部分

  VIEW_ORDER_BYVARCHAR2(600);  --视图的ORDERBY部分

  VIEW_GROUP_BYVARCHAR2(600);  --视图的GROUPBY部分

  VIEW_HAVINGVARCHAR2(600);  --视图的HAVING部分

  VIEW_DB_LINK_NAMEVARCHAR2(100);  --视图的DBLINK部分

 

  ROW_COUNTNUMBER;--行数

 

  CURSORETL_VIEWS_CURSORIS  --提取创建视图需要到信息

  SELECTVIEW_NAME,VIEW_SELECT,VIEW_FROM,VIEW_WHERE,VIEW_ORDER_BY,VIEW_GROUP_BY,VIEW_HAVING,VIEW_DB_LINK_NAMEFROMETL_VIEWSTWHERE=(SELECTMAXFROMETL_VIEWST2WHERE=;

 

BEGIN

  --统计行数

  SELECTCOUNT(*)INTOROW_COUNT  FROMETL_VIEWSTWHERE=(SELECTMAXFROMETL_VIEWST2WHERE=;

 

  OPENETL_VIEWS_CURSOR;--打开游标

  FORIIN1..ROW_COUNT  LOOP  --遍历

  FETCHETL_VIEWS_CURSOR

    INTOVIEW_NAME,VIEW_SELECT,VIEW_FROM,VIEW_WHERE,VIEW_ORDER_BY,VIEW_GROUP_BY,VIEW_HAVING,VIEW_DB_LINK_NAME;

 

    ---拼接创建视图到语句

  VIEW_CREATE_CODE:

='createorreplaceview'||VIEW_NAME||'asselect'||VIEW_SELECT||'from'||VIEW_FROM;

 

  IFVIEW_DB_LINK_NAMEISNOTNULLTHEN

    VIEW_CREATE_CODE:

=VIEW_CREATE_CODE||'@'||VIEW_DB_LINK_NAME;

  ENDIF;

 

  IFVIEW_WHEREISNOTNULLTHEN

    VIEW_CREATE_CODE:

=VIEW_CREATE_CODE||'where'||VIEW_WHERE;

  ENDIF;

 

  IFVIEW_ORDER_BYISNOTNULLTHEN

    VIEW_CREATE_CODE:

=VIEW_CREATE_CODE||'orderby'||VIEW_ORDER_BY;

  ENDIF;

 

  IFVIEW_GROUP_BYISNOTNULLTHEN

    VIEW_CREATE_CODE:

=VIEW_CREATE_CODE||'groupby'||VIEW_GROUP_BY;

  ENDIF;

 

  IFVIEW_HAVINGISNOTNULLTHEN

    VIEW_CREATE_CODE:

=VIEW_CREATE_CODE||'having'||VIEW_HAVING;

  ENDIF;

 

  --输出创建语句

  (VIEW_CREATE_CODE);

  ('');

  --执行创建视图

  EXECUTEIMMEDIATEVIEW_CREATE_CODE;

  ENDLOOP;

  CLOSEETL_VIEWS_CURSOR;--关闭游标

END;

/

 

CREATEORREPLACEPROCEDUREPRO_INSERT_INTO_ETL_VIEWS

AS

 

--ADDBYCYYAN@ISOFTSTONE

--2009年2月1日21:

33:

37

---此存储过程用于将ETL_TABLE中标识需要创建VIEW到TABLE,进行自动提起转换到ETL_VIEWS中.

--处理过程用到啦系统表COL从此表中获取列名

 

  TABLE_NAMEVARCHAR2(100);--表名

  COL_NAME  VARCHAR2(100);--列名

 

  TABLE_COUNTNUMBER;--表到行数

  --COL_COUNT  NUMBER;--列数

 

  ETL_VIEWS_INSERT_CODEVARCHAR2(600);--插入语句到INSERT部分

  ETL_VIEWS_VALUES_CODEVARCHAR2(16000);--插入语句到VALUES部分

 

  --ETL_VIEWS的到列

  VIEW_NAME_PREFIXVARCHAR2(30);--实体名到前缀

  TABLE_TYPEVARCHAR2(30);--表类型如DB,ODS,DW

  TABLE_ROOT_INVARCHAR2(30);--表来源,来自那个系统,如资金系统"NHZJ",财务系统"NHCW"

  VIEW_SELECTVARCHAR2(10000);--VIEW语句到SELECT部分,这个需要遍历一个表到所有列

  DB_LINK_NAMEVARCHAR2(100);

  CURRENT_VERSIONVARCHAR2(600);--版本部分,这里没更新,只要全部删除,或不断插入,此字段定义了版本,没有变更都形成新到版本,取值是取最大值

 

  CURSOR_NUMBERNUMBER;

  COL_SELECT_SQLVARCHAR2(100);

  RETURN_VALUENUMBER;

  --从ETL_TABLES中查询需要生成视图到表

  CURSORDB_TABLES_CURSORIS

  SELECTUPPER(TABLE_NAME),,,,DB_LINK_NAMEFROMETL_TABLESTWHERE(UPPER='DB'

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1