如何获取存储过程的ID?

时间:2015-07-15 15:18:47

标签: sas sas-metadata

我有一些名称相同的存储过程。要确定当前正在运行的进程,我需要知道元数据中存储进程的ID。我可以在某处检索STP-id吗?我找不到一个包含id的变量。 我只找到了symget(' sysjobid');它返回unix-processid,而不是存储过程的id。

典型的存储过程ID如下所示: A5DF0R0G.B80001L7

我需要知道正在运行的进程中的id,以从元数据中检索进程的某些属性 任何其他确切地在元数据中识别过程的解决方案也是受欢迎的,但我不能使用他的名字,因为对于不同的过程它可能会发生几次。

例如:

put 'name:' &_program; /*this already works and returns the name of the stored process*/
put 'id:' ?; /*need to know the id of the process, because name is not distinct*/

1 个答案:

答案 0 :(得分:0)

我不认为存储过程有ID,但它的位置和名称是唯一的。

用户_PROGRAM宏变量,用于确定正在运行的存储过程。它的格式为" / SAS文件夹/存储过程文件夹/存储过程名称"。

类似于运行IOM应用程序时存储过程的A5DF0R0G.B80001L7 ID,但我不认为在确定存储过程创建的内容以及当时保存的位置时它会很有用,所以我会选择" _PROGRAM"。

如果您仍在使用ID,请使用此代码(信用卡:https://support.selerity.com.au/entries/23169736-Example-Data-Step-View-of-Stored-Procedures-in-Metadata):

 ******************************************************************************
* Purpose: Create a dynamic view of Stored Procedures registered in Metadata
* Notes  : You must establish a Metadata connection prior to running
******************************************************************************;
data work.stplist(drop=_: label="SAS Stored Process List") /     view=work.stplist;
 length id $17 _uri name description _modified _created location _location    $256;
  length created modified 8;
  format created modified datetime.;
  label id="Metadata ID"
        name="Stored Process Name"
        description="Description"
        location="Folder Location"
        created="Created"
        modified="Last Modified";
  _nobj=1;
  _n=1;
  call missing(id, _uri, name, description, _modified, _created, _location);
  do while(_n le _nobj);
    _nobj=metadata_getnobj("omsobj:ClassifierMap?@PublicType='StoredProcess'",_n,_uri);
    _rc=metadata_getattr(_uri,"Id",id);
    _rc=metadata_getattr(_uri,"Name",name);
    _rc=metadata_getattr(_uri,"Desc",description);
    _rc=metadata_getattr(_uri,"MetadataCreated",_created);
    _rc=metadata_getattr(_uri,"MetadataUpdated",_modified);
    created=input(_created,anydtdtm.);
    modified=input(_modified,anydtdtm.);
    * Get folder object the current STP is in *;
    _rc=metadata_getnasn(_uri,"Trees",1,_uri);
    * Get folder name the current STP is in *;
    _rc=metadata_getattr(_uri,"Name",location);
    _tree=1;
    * Loop up the folder hierarchy *;
    do while (_tree>0);
      * Get the parent folder object *;
      _tree=metadata_getnasn(_uri,"ParentTree",1,_uri);
      if _tree > 0 then do;
        * If there was a parent folder, get the name *;
        _rc=metadata_getattr(_uri,"Name",_location);
        * Construct the path *;
        location=catx('/',_location,location);
      end;
    end; * Folder Hierachy *;
    location = '/'||location;
    output;
    _n=_n+1;
  end;
run;

此致 瓦西里