Crodys 使用Oracle同义词解决方案

以展现流程业务信息列表为例,介绍使用Oracle同义词解决方案。
在Oracle数据库BPM_SUN用户中有如下对象:

对象名称 类型 说明
sun_biz_base table
sub_focusprocess table
sub_biz_info synonym create synonym SUN_BIZ_INFO for BPM_MANAGER.BIZ_INFO;

查询列表SQL语句如下所示:

select a.title,to_char(a.live_date,‘yyyy-mm-dd‘),b.endflow 
from sun_biz_info a,sun_biz_base b 
where a.info_id = b.info_id and a.rvsn_number=b.rvsn_number;

查询结果如下:
技术分享

同义词使用解决方案

在数据源(Database MateData)中,Oracle数据库对象只有:Tables、Views、Procedures三种,无同义词Synonyms选项。
技术分享

怎样能使用同义词(Synonyms)呢?
在创建Webservice时,先选择可见的某个或几个数据库中的表,如上图例所示选择了SUN_BIZ_BASE和SUN_FOCUSPROCESS两个表。
新建自定义Webservice,名称为:QueryBizList

技术分享

通过WS-AppServer Package工具,生成如下Java代码,再通过同步代码到SVN,基于Eclipse开发工具,编写涉及到同义词SQL语句代码。
技术分享

/*
  This class has been generated by the Code Generator
*/

package com.unicom.sun.sunpackage;

import com.cordys.cpc.bsf.busobject.BusObjectConfig;
import com.cordys.cpc.bsf.busobject.QueryObject;


public class SUN_BIZ_BASE extends SUN_BIZ_BASEBase
{
    public SUN_BIZ_BASE()
    {
        this((BusObjectConfig)null);
    }

    public SUN_BIZ_BASE(BusObjectConfig config)
    {
        super(config);
    }

    public static String QueryBizList()
    {
        String sql="select a.title,to_char(a.live_date,‘yyyy-mm-dd‘),b.endflow ";
        sql += " from sun_biz_info a,sun_biz_base b ";
        sql += " where a.info_id = b.info_id and a.rvsn_number=b.rvsn_number";

        QueryObject query = new QueryObject(sql);
        // TODO implement body
        return query.getObject().toString();
    }
}

注:上述SQL语句中,“表”sun_biz_info是同义词。

技术分享
通过SVN把Java代码导回Cordys平台,编译代码并发布及发布Webservice,使用Webservice测试工具Operation Test Tool,测试结果如下:
技术分享

结论

通过本次验证,实现了在Cordys平台上使用Oracle同义词技术方案,结论如下:

  • 1.私有同义词与公有同义词没有区别;
  • 2.Database Metadata 中并不提供针对同义词的服务,也不会把同义词识别为表。也就是说,不能通过Database Metadata 直接为同义词创建method;
  • 3.使用同义词就是首先通过其他表(Tables)创建method,然后修改这个method的SQL语句,改为对同义词的操作。

由于作者水平有限,欢迎反馈讨论。

相关文档:Oracle同义词简明用法 肖永威 2015.5

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。