2017-07-24 76 views
2

我试着用以下的SAS代码:SAS直通行受到影响

proc sql; 
connect to oracle as oracle(&user &pass &path); 
    execute(delete from t where x > 1) by oracle; 
disconnect from oracle; 
quit; 

,最终我需要打印日志文件多少行删除。

现在我已经发现了两个宏变量SQLXRCSQLXMSG,但它们只表示相应的返回码和错误信息。这是不够的,以获得所需的。

请指教。

感谢

+1

听起来像是关于如何使用ORACLE而不是SAS的问题。 – Tom

+0

@Tom如果可以使用sql%rowcount,那可能是一个解决方案 – griboedov

+0

有没有办法将sql%rowcount的值作为查询的一部分返回?或者你需要创建一个存储过程来运行删除,保存计数,然后返回计数作为查询结果,以便SAS可以尝试运行该过程作为select而不是execute语句的一部分? – Tom

回答

1

您可以运行等效的查询,并在执行前返回结果的删除:

而且,不需要as oracle位,你可以使用as关键字在connect to语句分配别名,它默认

proc sql noprint; 
connect to oracle (&user &pass &path); 
    select c into :ct from connection to oracle (select count(*) as c from t where x > 1); 
    %PUT NOTE: There are &c rows in t where x > 1; 
    execute(delete from t where x > 1) by oracle; 
    %PUT NOTE: I deleted &c rows from t; 
disconnect from oracle; 
quit; 
  1. 是发动机(oracle)的名称使用是因为否则,select语句会将计数输出到输出窗口
  2. select ... from connection to语法允许将查询的结果返回到SAS会话。
  3. 宏变量c用于存储行数。
  4. %PUT语句用于将信息返回到日志。

如果表在两个语句的执行之间发生变化,那么select语句可能不会返回删除的行数的精确计数。