首页 > 解决方案 > 表锁不可用...在数据集(表)释放之前有什么方法可以保持(等待)程序?

问题描述

是否可以保留(等待)通过调度程序运行的程序,直到特定表或数据集被释放?由于某些表锁定,我的调度程序程序失败。我无法更改我的 SAS 控制台运行时间。我只是想知道是否有任何代码可以保持正在运行的程序直到某个特定的表发布并且程序不断刷新直到表被解锁

我尝试使用以下代码,但未能继续。

PROC SQL;
INSERT INTO EMPLOYEE.VIKAS_DETAILS (EMPID,AGE, SEX, STATE, COUNTRY) 
            SELECT DISTINCT EMPID, AGE, SEX, STATE, COUNTRY FROM WORK.FINAL_EMPLOYEE; 
QUIT;

错误:

EMPLOYEE.VIKAS.DATA 没有可用的锁。

我收到此错误是因为我的其他程序之一也将相同的变量插入到上述数据集中但具有不同的数据。

标签: sqlsaslocking

解决方案


取决于 SAS 的版本和定义EMPLOYEElibref 的 libname 语句。但是,您可以尝试将FILELOCKWAIT=选项添加到 libname

libname EMPLOYEE … FILELOCKWAIT=300; /* wait up to 5 minutes when a member is locked from use */

FILELOCKWAIT=n
指定 SAS 等待锁定文件可供另一个进程使用的秒数。如果锁定的文件在 n 指定的秒数之前被释放,则 SAS 为当前进程锁定文件并继续。如果在达到秒数时文件仍处于锁定状态,则 SAS 将“锁定文件”错误写入日志并且 DATA 步骤失败。


推荐阅读