4

我想知道当我们尝试通过数据步进函数读取元数据时,为什么metadata_getnatr函数与函数一起使用。metadata_resolve

例如:在链接中涵盖的代码中

转载在这里:

示例 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;
  • 他们为什么使用 getnatr 函数?
  • metadata_resolve 是否将 URI 作为输出或输出是什么?

谢谢!

4

1 回答 1

1

我同意 - 这里的文档可以改进!

第一个示例非常清楚 - 提供一个 URI(元数据查询)并返回类型和 Id 以用于进一步的逻辑/查询。

第二个示例演示了一些边缘情况。它使用 REPO命名空间(而不是通常的 SAS 命名空间)来返回一个表示存储库的对象(例如 FOUNDATION)。您可能已经注意到,您不能用原始metadata_resolve函数中的 ID 替换 URI(您希望该示例能够证明这一点,以提高效率)。根据文档, RepositoryBase 子类继承了它的元数据 id,因此这可能表明为什么不使用 URI 就无法引用它。

无论如何,要澄清 的用法metadata_resolve

  • 不一定要与它结合使用metadata_getnatr
  • 当您想找出从 URI 返回的元数据类型时,它很有用
  • 当您要在多个查询中使用相同的 uri 时,它很有用(将其转换为 ID 更有效)

SAS 会将您的查询缓存在同一个元数据函数中,因此除非您要在多个元数据函数中使用相同的 URI,否则您不需要使用metadata_resolve.

于 2017-04-17T13:02:00.980 回答