SAS通过受影响的行

SAS通过受影响的行,sas,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; 最后,我需要在日志文件中打印删除了多少行 现在我已经找到了两个宏变量SQLXRC和SQLXMSG,但是它们只相应地表示返回代码和错误消息。这还不足以达到预期的效果

我正在尝试使用以下SAS代码:

proc sql;
connect to oracle as oracle(&user &pass &path);
  execute(delete from t where x > 1) by oracle;
disconnect from oracle;
quit;
最后,我需要在日志文件中打印删除了多少行

现在我已经找到了两个宏变量
SQLXRC
SQLXMSG
,但是它们只相应地表示返回代码和错误消息。这还不足以达到预期的效果

请告知


谢谢

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

另外,不需要
as-oracle
位,您可以在
connect to
语句中使用
as
关键字来分配别名,默认情况下,别名是引擎的名称(
oracle

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;
  • 之所以使用
    NOPRINT
    ,是因为否则select语句会将计数打印到输出窗口
  • 选择。。。从连接到
    语法允许将查询结果返回到SAS会话
  • 宏变量
    c
    用于存储行计数。SAS中的
    INTO
    子句后跟
    :c
    表示将结果加载到名为
    c
    的宏变量中。您可以使用
    &c
    检查该值
  • %PUT
    语句用于将信息返回日志

  • 如果表在两条语句执行之间发生了更改,则select语句可能不会返回已删除行数的准确计数。

    听起来像是关于如何使用ORACLE而不是SAS的问题。@Tom如果可以使用sql%rowcount,这可能是一个解决方案。是否有方法将sql%rowcount的值作为查询的一部分返回?或者您是否需要创建一个存储过程来运行delete,保存计数,然后将计数作为查询结果返回,以便SAS可以尝试将该过程作为select而不是execute语句的一部分来运行?很抱歉这个业余问题,但是into:ct意味着什么?我偶尔会看到它**将计数(不同的产品)选择为:ct**。您可以帮助指向文档吗?如果您搜索
    SAS SQL INTO子句
    ,您将获得文档您的示例将根据查询返回的不同产品值的计数创建一个名为
    ct
    的宏变量。谢谢@mjsqu。我们是否使用了其他场景:var_name而不是&var_name?我想不出,SAS中的冒号用于通配符变量名,所以
    drop status:
    将删除所有名为
    status、status1、status\u now
    等的列。还需要注意的是,
    &
    仅用于调用,而不用于赋值,
    仅用于
    proc sql