Oracle BI Publisher数据模型变量存储与关联查询报错求助
问题解决:Oracle BI Publisher数据模型SQL语法错误修复
原代码核心问题
- 语法结构混乱:你把PL/SQL的变量声明块直接嵌在了SELECT语句中间,Oracle SQL不允许这种写法,这直接导致解析器找不到正确的FROM位置,触发报错。
- 子查询用法错误:后面两个获取segment的语句不能直接放在SELECT列表里用逗号分隔,这种写法不符合SQL规范。
- 变量未正确关联:你定义的var1/var2没有和主查询的行数据关联,即使语法正确,也无法实现每行对应两个ID的segment查询。
修正后的SQL代码
直接通过两次关联gl_code_combinations表实现需求,不需要额外声明变量,BI Publisher数据模型兼容这种纯SQL写法:
select a.dist_code_combination_id, a.def_acctg_accrual_ccid, a.invoice_id, b.column4, gc1.segment as segment_var1, gc2.segment as segment_var2 from AP_invoice_distributions_all a join table2 b on a.invoice_id = b.column4 left join gl_code_combinations gc1 on gc1.code_combination_id = a.dist_code_combination_id left join gl_code_combinations gc2 on gc2.code_combination_id = a.def_acctg_accrual_ccid
说明
- 用
LEFT JOIN关联两次gl_code_combinations,分别对应dist_code_combination_id和def_acctg_accrual_ccid,确保每行都能获取到对应的segment值。 - 给两个关联表起别名
gc1、gc2,区分不同的segment列,最终返回6列数据,符合你的预期。 - 这种写法避免了PL/SQL的复杂逻辑,更适配BI Publisher的数据模型查询场景,语法完全符合Oracle SQL规范。
内容的提问来源于stack exchange,提问作者DavidxDavid
相关产品推荐
相关产品推荐

