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