Oracle 11g:如何从关联表的函数中返回拆分的多列结果
嗨,这个问题很好解决!你已经搞定了自定义类型和函数的创建,现在只需要正确访问返回对象的属性就行,不过要注意避免重复调用函数带来的性能损耗,我给你两种实用方案:
方案1:直接访问对象属性(简单直观)
这种写法最直接,直接在查询里调用函数后跟上.和属性名就能拆分出列:
select employee_id, salary, myfunc(department_id).val_1 as department_name, myfunc(department_id).val_2 as manager_id from EMPLOYEES where employee_id in(100,101);
⚠️ 注意:这种方式Oracle会对每一行数据调用两次myfunc,如果函数逻辑复杂或者查询数据量较大,会影响执行效率。
方案2:预先获取函数结果(性能更优,推荐)
通过子查询或者CTE(公共表表达式)先把函数的返回对象一次性取出来,再在主查询中访问它的属性,这样每一行只会调用一次函数,性能更好:
子查询写法
select e.employee_id, e.salary, obj.val_1 as department_name, obj.val_2 as manager_id from ( select employee_id, salary, myfunc(department_id) as obj from EMPLOYEES where employee_id in(100,101) ) e;
CTE写法(可读性更强)
with emp_with_obj as ( select employee_id, salary, myfunc(department_id) as obj from EMPLOYEES where employee_id in(100,101) ) select employee_id, salary, obj.val_1 as department_name, obj.val_2 as manager_id from emp_with_obj;
这种方案在处理大量数据或者函数包含复杂逻辑时,优势会非常明显。
内容的提问来源于stack exchange,提问作者usersam
相关产品推荐
相关产品推荐

