求Oracle Apps中仅含覆盖项(lse_id=7)的服务合同查询语句
查询Oracle Apps中包含覆盖项(lse_id = 7)的服务合同
嘿,我来帮你搞定这个Oracle Apps里查询带覆盖项(lse_id=7)的服务合同的问题!我猜你可能是在表关联、过滤条件或者权限上踩了坑,下面给你靠谱的解决方案:
核心查询语句(带注释)
这个SQL关联了Oracle Apps服务合同的核心表,精准筛选出包含覆盖项的合同:
SELECT h.chr_id AS contract_id, -- 合同唯一ID h.contract_number AS contract_number, -- 合同编号 h.status_code AS contract_status, -- 合同状态(ACTIVE/IN_PROGRESS等) l.line_number AS coverage_line_num, -- 覆盖项行号 ls.name AS coverage_style_name -- 覆盖项行样式名称(验证lse_id=7是否为覆盖项) FROM OKC_K_HEADERS_B h -- 合同表头表 JOIN OKC_K_LINES_B l ON h.chr_id = l.chr_id -- 合同行表,关联表头 JOIN OKC_LINE_STYLES_B ls ON l.lse_id = ls.lse_id -- 行样式表,关联行样式ID WHERE h.contract_type_code = 'SVC' -- 过滤服务合同(根据你的环境调整,有的可能用'SERVICE') AND ls.lse_id = 7 -- 筛选覆盖项行样式 AND h.status_code IN ('ACTIVE', 'IN_PROGRESS') -- 可选:只查有效合同 ORDER BY h.contract_number, l.line_number;
优化方案:仅返回唯一合同记录
如果你的需求是只获取包含覆盖项的合同列表(不重复显示同一合同的多个覆盖项),可以用EXISTS子查询提升性能:
SELECT h.chr_id AS contract_id, h.contract_number AS contract_number, h.status_code AS contract_status FROM OKC_K_HEADERS_B h WHERE h.contract_type_code = 'SVC' AND h.status_code IN ('ACTIVE', 'IN_PROGRESS') AND EXISTS ( SELECT 1 FROM OKC_K_LINES_B l JOIN OKC_LINE_STYLES_B ls ON l.lse_id = ls.lse_id WHERE l.chr_id = h.chr_id AND ls.lse_id = 7 ) ORDER BY h.contract_number;
关键注意事项
- 合同类型代码验证:不同Oracle Apps环境的服务合同类型代码可能不同,你可以先执行
SELECT * FROM OKC_CONTRACT_TYPES_B WHERE name LIKE '%Service%'确认正确的contract_type_code - 多语言支持:如果需要合同的本地化名称,关联
OKC_K_HEADERS_TL表,添加条件AND h.language = USERENV('LANG') - 权限问题:确保你拥有
OKC_K_HEADERS_B、OKC_K_LINES_B、OKC_LINE_STYLES_B这三个表的SELECT权限,必要时联系DBA申请OKC_USER角色 - 行样式验证:可以先执行
SELECT * FROM OKC_LINE_STYLES_B WHERE lse_id =7确认这个ID对应的确实是覆盖项行样式
内容的提问来源于stack exchange,提问作者Kinnari
相关产品推荐
相关产品推荐

