nmkl 发表于 2015-9-23 07:10:11

为行销系统提供EBS表接口

  行销项目开工了,需要从EBS中提取表结构,并实现数据同步。
  同步机制:每次同步时清空行销table的所有数据,然后重新写入。
  日常同步:每周一次,EBS系统负载较小时同步(例如:每天凌晨2点)。
  急需同步:EBS提供功能界面及按钮,点击按钮自动执行同步(少用)。
  可能存在问题:行销系统的数据滞后...
  
  在提取EBS表结构初,想当然地就直接按文档说明在EBS中狂找对应的字段名称、数据类型...
  类似于:

代码

create table ERP_CONTACT
(
CONTACT_ID      NUMBER(15),
CUST_ACCT_SITE_ID NUMBER(15) not null,
FIRST_NAME      VARCHAR2(150),
LAST_NAME         VARCHAR2(150),
COUNTRY_CODE      VARCHAR2(10),
AREA_CODE         VARCHAR2(10),
PHONE_NUMBER      VARCHAR2(50),
PHONE_TYPE      VARCHAR2(30),
MAIL_STOP         VARCHAR2(60),
PHONE_STATUS      VARCHAR2(30),
CONTACT_STATUS    VARCHAR2(1),
CREATION_DATE   DATE,
CREATED_BY      NUMBER(15),
LAST_UPDATE_DATEDATE,
LAST_UPDATED_BY   NUMBER(15)
)  
  但是之后asheng提醒,这样表结构是搞出来了,但是下一次需要实现同步时候,是不是还是要再整理一遍?
  实在是不想再一次去碰EBS的table,会疯的...
  那么有几件事情要做,首先是找到对应字段的基表(非视图,EBS视图过于庞大),然后找到基表之间的关系,需要注意table的一些必要限制条件。 如:
  create table ERP_CONTACT
as
select contact.contact_id,
       addr.cust_acct_site_id,
       contact.first_name,
       contact.last_name,
       phone.country_code,
       phone.area_code,
       phone.phone_number,
       phone.phone_type,
       contact.mail_stop,
       phone.status phone_status
       contact.status contact_status,
       contact.creation_date,
       contact.created_by,
       contact.last_update_date,
       contact.last_updated_by
from hz_cust_acct_sites_all addr,
       ar_phones_v phone,
       (select acct_role.cust_account_role_id contact_id,
               party.person_first_name first_name,
               party.person_last_name last_name,
               org_cont.mail_stop,
               acct_role.status,
               acct_role.creation_date,
               acct_role.created_by,
               acct_role.last_update_date,
               acct_role.last_updated_by,
               acct_role.cust_account_id,
               acct_role.cust_acct_site_id,
               rel_party.party_id
          from hz_contact_points       cont_point,
               hz_cust_account_roles   acct_role,
               hz_parties            party,
               hz_parties            rel_party,
               hz_relationships      rel,
               hz_org_contacts         org_cont,
               hz_cust_accounts      role_acct,
               hz_contact_restrictions cont_res,
               hz_person_language      per_lang
         where acct_role.party_id = rel.party_id
         and acct_role.role_type = 'CONTACT'
         and org_cont.party_relationship_id = rel.relationship_id
         and rel.subject_id = party.party_id
         and rel_party.party_id = rel.party_id
         and cont_point.owner_table_id(+) = rel_party.party_id
         and cont_point.contact_point_type(+) = 'EMAIL'
         and cont_point.primary_flag(+) = 'Y'
         and acct_role.cust_account_id = role_acct.cust_account_id
         and role_acct.party_id = rel.object_id
         and party.party_id = per_lang.party_id(+)
         and per_lang.native_language(+) = 'Y'
         and party.party_id = cont_res.subject_id(+)
         and cont_res.subject_table(+) = 'HZ_PARTIES') contact
where addr.cust_account_id = contact.cust_account_id(+)
   and addr.cust_acct_site_id = contact.cust_acct_site_id(+)
   and contact.party_id = phone.owner_table_id(+);

这样做的好处在于,一个是达到建立表结构的目的,数据类型也与EBS同步,另外当需要同步数据时,就只需要执行select语句就取得了所需要的数据。
页: [1]
查看完整版本: 为行销系统提供EBS表接口