假设我想从某些OFG g获取所有字段,而忽略|java+field:///java/lang/System/err|
之类的字段。如何检查结果字段是否实际引用了导入项目中的某个类?
我的尝试就是这样。这里编译器在<- classes
处亮起。所以它不允许from.path
。我认为应该是可能的。
g = buildGraph(createOFG(|project://eLib|));
m = createM3FromEclipseProject(|project://eLib|);
set[str] classes = { cl.path | cl <- classes(m) };
set[loc] fields = { from | <from,_> <- g,
from.scheme == "java+field", from.path <- classes };
我怎样才能做到这一点?
答案 0 :(得分:0)
简单回答:create type list_varchar2 is table of varchar2(100);
/
create or replace function list_of_column(p_name in varchar2) return list_varchar2 PIPELINED
is
v_Cnt number := 0;
v_table_description dbms_sql.desc_tab;
c_curosor integer default dbms_sql.open_cursor;
begin
dbms_sql.parse( c_curosor, 'select * from '|| p_name||' where 1 = 2', dbms_sql.native );
dbms_sql.describe_columns( c => c_curosor,
col_cnt => v_Cnt,
desc_t => v_table_description );
for i in 1 .. v_Cnt
loop
pipe row ( v_table_description(i).col_name );
end loop;
dbms_sql.close_cursor(c_curosor);
exception
when others then dbms_sql.close_cursor( c_curosor );
raise;
end ;
/
select * from table(list_of_column('table_name'))
/
select * from table(list_of_column('view_name'))
/
select * from table(list_of_column('synonym'))
/
不是模式语法,因此您可以使用变量:
from.path
或
set[loc] fields = { from | <from,_> <- g,
from.scheme == "java+field", x <- classes, x == from.path };
问题的一个很好的解决方案可能是使用包含关系 set[loc] fields = { from | <from,_> <- g,
from.scheme == "java+field", x := from.path, x <- classes };
,如果你可以传递地关闭它m@containment
并从顶部查询你知道项目中是否有东西,如{{1 }}。
将m@containment*
保留在变量中是件好事,因为这是一项昂贵的计算。
你可以找出遏制关系的顶部是什么样的:
myField in m@containment*[ |java+package:///elib|]