创建使用多个模式中的表的查询的最佳方法?

时间:2014-03-20 01:26:50

标签: java hibernate struts-1

我正在使用Tomcat和Apache httpd服务的Web应用程序使用Struts 1.3.6和Tomcat 6。

此应用程序与Oracle和MySQL数据库进行通信。 Oracle DB有14种不同的模式,我有一个select查询,我想把它放入一个hbm.xml文件中,该文件使用3个Oracle模式中的8个表。目的是根据DynaActionForm中的用户输入动态添加where子句where。

我不允许将select构建为即席查询并将其置于工厂或操作中,如Hibernate - Complex Query from multiple Tables to one object所示。

这可能吗?如果是这样,这样做的例子会有所帮助。

由于

编辑:我应该注意到MySQL DB的Hibernate会话管理器以及每个Oracle架构的另一个会话管理器。

编辑:问题中的查询...

select distinct
ca.addr_no as customer_number, decode(max(ctn.telephone_no),min(ctn.telephone_no),max(ctn.telephone_no),max(ctn.telephone_no)||', '||min(ctn.telephone_no)) as phone, ca.secondary_addressable_object||' '||ca.primary_addressable_object||' '||ca.street_name as street,
ca.primary_addressable_object, ca.street_name, ca.town_name as suburb, ca.postcode, ii.incident_ref, rd.report_ref, ii.description, ii.inc_category_id, ii.oz_name,
isl.look_up_description as status, ii.group_id, rlu.look_up_description as cause, to_char(ii.creation_date,'dd/mm/yyyy hh24:mi') as creation_date, nvl(cpa.link_reference,'VACANT') as nmi,
rc.report_id, ii.creation_date, ii.primary_ref, (ii.completed_date - ii.creation_date) as duration
from
tcs.inc_incident ii, pbr.rpt_details rd, enmac.look_up_list isl,
pbr.rpt_incident ri, pbr.rpt_reason rr, pbr.rpt_look_up rlu,
pbr.rpt_restoration_customers rc, tcs.cd_telephone_no ctn, tcs.cd_addresses ca,
tcs.cd_cust_property_assoc cpa, pbr.rpt_restoration_stages rs
where
ii.incident_id(+) = ri.incident_id||''
and ri.report_id||'' = rd.report_id(+)
and ii.status+0 = isl.look_up_reference(+)
and isl.look_up_name(+)||'' = 'Incident Status'
and ri.report_id||'' = rr.report_id(+)
and rr.cause_group||'' = rlu.look_up_code(+)
and rlu.look_up_field(+)||'' = 'CAUSE_GROUP'
and ri.report_id(+) = rc.report_id||''
and rc.pro_number(+) = ca.addr_no+0
and rc.stage_id||'' = rs.stage_id(+)
and rc.report_id||'' = rs.report_id(+)
and cpa.customer_no+0 = ctn.pro_number(+)
and cpa.customer_no(+) = ca.addr_no+0
and rs.status(+) = 0

任选:

and ri.storm_flag(+) != 1 and rd.status(+) != -6 

继续:

and ca.addr_no in (

随着一堆更多的子选择,这取决于表单中的用户输入。

我知道我需要将旧的Oracle连接样式转换为ANSI标准,作为其中的一部分...

0 个答案:

没有答案