SAS通过受影响的行
我正在尝试使用以下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,但是它们只相应地表示返回代码和错误消息。这还不足以达到预期的效果
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