我需要从主表中获取列,我需要获取的列列表将位于不同users.This的元数据表中,因为每个用户可能没有相同数量的列要获取,因此需要是动态的。
元数据表
User short_desc
rk sector
rk Industry
pa sector
pa Industry
pa Subindustry主数据表
ID sector Industry Subindustry
594918104 Technology Information Technology CyberSecurity
G0464B107 Financial Services Financials Banks当从元表中选择用户rk时,当选择用户pa时,我只想获得扇区和行业,我也希望只获得扇区、行业和子行业字段。
尝试从另一个解决方案,但这不是动态的。
SELECT t2.user_id,
t1.attr_name,
CASE
WHEN t1.attr_path = 'str1' THEN t2.str1
WHEN t1.attr_path = 'str2' THEN t2.str2
END
col_sel
FROM metadata t1 INNER JOIN class t2 ON t1.org_id = t2.org_id
WHERE t1.org_id = 1当从元表中选择用户rk时,当选择用户pa时,我只想获得扇区和行业,我也希望只获得扇区、行业和子行业字段。
发布于 2019-06-12 09:14:33
一种选择是使用返回引用游标的函数。
测试用例:
SQL> select * from metadata;
C_ SHORT_DESC
-- --------------------
rk sector
rk industry
pa industry
pa sector
pa subindustry
SQL> select * from master_data;
ID SECTOR INDUSTRY SUBINDUSTRY
---------- --------------- -------------------- ---------------
5949 technology information tech cyber security
g046 financial financials banks功能:
SQL> create or replace function f_meta (par_user in varchar2)
2 return sys_refcursor
3 is
4 l_str varchar2(200);
5 rc sys_refcursor;
6 begin
7 select listagg(short_desc, ', ') within group (order by null)
8 into l_str
9 from metadata
10 where c_user = par_user;
11
12 l_str := 'select ' || l_str ||' from master_data';
13
14 open rc for l_str;
15 return rc;
16 end;
17 /
Function created.测试:
SQL> select f_meta('rk') from dual;
F_META('RK')
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
INDUSTRY SECTOR
-------------------- ---------------
information tech technology
financials financial
SQL> select f_meta('pa') from dual;
F_META('PA')
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
INDUSTRY SECTOR SUBINDUSTRY
-------------------- --------------- ---------------
information tech technology cyber security
financials financial banks
SQL>https://stackoverflow.com/questions/56558355
复制相似问题