今天改bug遇到了一个错误,如题.是别人改了我的sql,没经过严格的测试,后来发现改坏了.出错的语句如下 :
select
g.id, g.account_id, g.account_relationship_id
, (select le.DISPLAY_NAME
from g, lov_element le
where g.GRIEVANCE_TYPE = le.VALUE
and le.LOV_NAME = 'GRIEVANCE_TYPE') grievance_type
, g.requestor_name, g.continue_coverage_flag
, g.comments, g.creation_date, g.approved_flag,
p.first_name,p.id
from
account_relationship ar,g, person p ,account a
产生这个错误是由于子查询中的结果如果 返回结果有两个以上,就会导致oracle抛出这个错,因为查询条件不能支持多个查询参数.可以做如下修改:
select
g.id, g.account_id, g.account_relationship_id
, nvl(lov_list1.DISPLAY_NAME, ' ') as grievance_type
, g.requestor_name, g.continue_coverage_flag
, g.comments, g.creation_date, g.approved_flag, p.first_name, p.middle_initial, p.last_name, p.party_id
from
account_relationship ar,g, person p ,account a,
(SELECT l.lov_name,l.display_name,l.value,enabled from lov_list l where (lov_name='GRIEVANCE_TYPE' and enabled='T')) lov_list1
要点是通过在where条件中加入需要查询的结果子集来将数据库中保存的value替换成页面上显示的display name