如何在Oracle SQL中关联两个函数:将一个函数结果作为另一参数
实现方案:无需修改函数或写循环,用查询直接合并结果
完全可以通过纯查询实现需求,不用创建循环累加器函数,也不用修改p49_get_data函数,核心用**横向连接(LATERAL JOIN)**关联两个查询即可:
SELECT pd.* FROM get_error_rate_by_pod(:P26_REPORT_WEEK, :P26_ERROR_TYPE) er LATERAL JOIN p49_get_data(:P26_REPORT_WEEK, er.POD, :P26_ERROR_TYPE) pd;
原理说明
- 先执行
get_error_rate_by_pod拿到所有符合条件的POD结果 - 对每一条POD记录,自动调用一次
p49_get_data函数,将当前POD作为第二个参数传入 - 最终自动把所有函数返回的结果集合并为一个整体输出
兼容不同数据库的写法
如果你的数据库不支持LATERAL JOIN,可以根据数据库类型替换写法:
- SQL Server 用
CROSS APPLY:
SELECT pd.* FROM get_error_rate_by_pod(:P26_REPORT_WEEK, :P26_ERROR_TYPE) er CROSS APPLY p49_get_data(:P26_REPORT_WEEK, er.POD, :P26_ERROR_TYPE) pd;
- Oracle 12c之前版本 用
TABLE()函数:
SELECT pd.* FROM get_error_rate_by_pod(:P26_REPORT_WEEK, :P26_ERROR_TYPE) er, TABLE(p49_get_data(:P26_REPORT_WEEK, er.POD, :P26_ERROR_TYPE)) pd;
这种方式完全满足你的要求:不用修改现有函数,也不需要编写循环逻辑,纯SQL查询就能完成结果合并。
内容的提问来源于stack exchange,提问作者Christian Bongiorno
相关产品推荐
相关产品推荐

