查询结果是表名,如何再次进行查询
例如:
SQL:select c.cls_tabspace || '.' || c.cls_tabname
from mw_sys.mwt_om_cls c
where c.cls_id = 'F288816B-A10E-4961-91B9-BF3D6B4153E3'
的查询结果是一个表名,想实现查询该表名对应的表记录;但是直接引用没有效果,请教该如何引用查询。
select *
from (select c.cls_tabspace || '.' || c.cls_tabname
from mw_sys.mwt_om_cls c
where c.cls_id = 'F288816B-A10E-4961-91B9-BF3D6B4153E3') s
例如:
SQL:select c.cls_tabspace || '.' || c.cls_tabname
from mw_sys.mwt_om_cls c
where c.cls_id = 'F288816B-A10E-4961-91B9-BF3D6B4153E3'
的查询结果是一个表名,想实现查询该表名对应的表记录;但是直接引用没有效果,请教该如何引用查询。
select *
from (select c.cls_tabspace || '.' || c.cls_tabname
from mw_sys.mwt_om_cls c
where c.cls_id = 'F288816B-A10E-4961-91B9-BF3D6B4153E3') s
要不就用过程
---
emp
一句真不行。学习了
V_TAB_NAME VARCHAR2(30);
V_SQL VARCHAR2(2000);
BEGIN SELECT C.CLS_TABSPACE || '.' || C.CLS_TABNAME
INTO V_TAB_NAME
FROM MW_SYS.MWT_OM_CLS C
WHERE C.CLS_ID = 'F288816B-A10E-4961-91B9-BF3D6B4153E3'; V_SQL := 'insert into tab_b select * from :1';
EXECUTE IMMEDIATE V_SQL
USING V_TAB_NAME;
END;用动态语句吧,一句SQL不行的,因为DB无法解析一个不确定的“表名”
create or replace function mw_app.get_global_id(in_obj_id in varchar,
in_cls_id in varchar)
return varchar2 is
out_global_id varchar2(20);
c_sql varchar2(500);
tab_name varchar2(100);
begin
select tab
into tab_name
from (select c.cls_tabschema || '.' || c.cls_tabname tab
from mw_sys.mwt_om_cls c
where c.cls_id = in_cls_id);
c_sql := 'select GLOBAL_ID from ' || tab_name ||
' tab where tab.obj_id = ''' || in_obj_id || '''';
execute immediate c_sql
into out_global_id;
return out_global_id;
end;