我想知道当我们尝试通过数据步骤函数读取元数据时,为什么metadata_getnatr
函数与metadata_resolve
函数一起使用。
例如:在link
中涵盖的代码中转载于此:
示例1:使用对象URI
data _null_;
length id $20
type $256;
rc=metadata_resolve("omsobj:Machine?@Name='bluedog'",type,id);
put rc=;
put id=;
put type=;
run;
示例2:使用存储库URI
data _null_;
length id $20
type $256
attr $256
value $256;
rc=metadata_resolve("omsobj:RepositoryBase?@Name='myrepos'",type,id);
put rc=;
put id=;
put type=;
n=1;
rc=1;
do while(rc>=0);
rc=metadata_getnatr("omsobj:RepositoryBase?@Name='myrepos'",n,attr,value);
if (rc>=0) then put attr=;
if (rc>=0) then put value=;
n=n+1;
end;
run;
谢谢!
答案 0 :(得分:1)
我同意 - 这里的文档可以改进!
第一个例子很清楚 - 提供一个URI(元数据查询)并返回用于进一步逻辑/查询的类型和Id。
第二个例子演示了一些边缘情况。它使用REPO namespace(而不是通常的SAS命名空间)来返回表示存储库的对象(例如FOUNDATION)。您可能已经注意到,您不能使用原始metadata_resolve
函数中的ID替换URI(您希望该示例可以作为效率函数展示)。根据{{3}},RepositoryBase子类继承了它的元数据id,因此这可能表明在不使用URI的情况下无法引用它的原因。
无论如何,要澄清metadata_resolve
的用法:
metadata_getnatr
SAS会将您的查询缓存在同一个元数据函数中,因此除非您要在多个元数据函数中使用相同的URI,否则您不需要使用metadata_resolve
。