Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS条件Libname分配和错误日志_Sas - Fatal编程技术网

SAS条件Libname分配和错误日志

SAS条件Libname分配和错误日志,sas,Sas,我正在使用《SAS企业指南》6.1,并且正在使用“工具、SAS程序”下的“连接服务器时提交SAS代码”功能来提交我的所有个人凭据(libnames)。是的,我知道使用SAS管理控制台可能有一种更简单的方法来实现这一点,但目前还没有选择 我需要在每个项目中分配几个Teradata库,但问题是有时我(或者更常见的是我团队中的其他人)会更改密码,而忘记在启动代码中更改密码。这会导致几次错误的尝试,并立即将我锁定。我想做几件事: 创建一个条件libname分配,如果凭据正确,该分配将执行所有libnam

我正在使用《SAS企业指南》6.1,并且正在使用“工具、SAS程序”下的“连接服务器时提交SAS代码”功能来提交我的所有个人凭据(libnames)。是的,我知道使用SAS管理控制台可能有一种更简单的方法来实现这一点,但目前还没有选择

我需要在每个项目中分配几个Teradata库,但问题是有时我(或者更常见的是我团队中的其他人)会更改密码,而忘记在启动代码中更改密码。这会导致几次错误的尝试,并立即将我锁定。我想做几件事:

  • 创建一个条件libname分配,如果凭据正确,该分配将执行所有libname

  • 如果凭据不正确,则不会执行libnames(因此我不会将自己锁定在外)

  • 由于“连接服务器时提交SAS代码”部分中的SAS代码似乎没有生成日志,因此我希望向自己发送一封附有SAS日志的电子邮件(仅当凭据失败时)

  • 终止服务器连接(如果凭据出错),以避免进一步尝试分配库

  • 这是我的尝试,我在附加日志和设置电子邮件声明时遇到问题

    *Define personal credentials;
    %let myemail=gollum@middleearth.com;
    filename temp email "&myemail"; 
    
    *Define Teradata credentials;
    %let tera_user=Gollum;                         /*Teradata Username*/
    %let tera_pwd=#filthy_hobbitses;                         /*Teradata Password*/
    
    *Conditionally assign libraries;
    %macro libsetup();
    libname library1 teradata user=&tera_user password="&tera_pwd" tdpid=terap schema=library1 fastload=yes bulkload=yes fastexport=yes;
        %if &syslibrc=0 %then
            %do;
                libname library2 teradata user=&tera_user password="&tera_pwd" tdpid=terap schema=library2 fastload=yes bulkload=yes fastexport=yes;
                libname library3 teradata user=&tera_user password="&tera_pwd" tdpid=terap schema=library3 fastload=yes bulkload=yes fastexport=yes;
                *more library statements here;
            %end;
        %else 
            %do;
                data _null_;
                file temp
                subject="TERADATA CREDENTIALS ERROR"
                attach=("put SAS LOG filename here");
                put 'Teradata Login Failed.  SAS LOG Attached.';
                %abort abend;
            %end;
    %mend libsetup;
    %libsetup;
    

    谢谢。

    无法判断您是否在寻找其他方法的建议,或者是否在寻求电子邮件方面的帮助

    对于电子邮件,类似以下内容(未经测试)应该可以使用:

    filename __mymail email
      to="gollum@middleearth.com"
      from="gollum@middleearth.com"
      subject="credential error"
      attach="/home/mylog.log"
    ;
    
    data _null_;
      file __mymail;
      put "Hi!";
    run;
    
    请注意,SAS正在执行的服务器必须能够访问邮件服务器,实际需要的代码可能因邮件协议等而异

    要附加日志,可能需要使用PROC PRINTTO将日志写入文件,然后再次使用PROC PRINTTO在发送电子邮件之前释放该文件


    HTH

    有时使用libname函数而不是libname语句更容易。如果要在代码中嵌入密码,请使用
    PROC pwcode
    对其进行加密,然后在代码中嵌入加密值(例如
    %LET TERA_PWD={sas002}ax=5qZhw4…
    )。