【问题标题】:SAS - How to know if previous PROC SQL modified a Database Table?SAS - 如何知道以前的 PROC SQL 是否修改了数据库表?
【发布时间】:2020-07-19 18:00:20
【问题描述】:

使用 PROC SQL,可以连接到数据库(在我的例子中是 Db2)并执行插入、删除等操作。

如果一个这样的过程没有导致对目标表的修改,您将在日志中看到这样的注释:

NOTE: No data found/modified.

因此很明显,SAS 在每个此类步骤之后都会对此进行检查。

除了动态解析日志之外,我能否在程序执行期间访问此信息? 也许某种自动宏变量/数据集存储了最后一步的状态?

编辑:我正在使用带有 EXECUTE-Statements 的 Pass Thru SQL。

【问题讨论】:

  • 您是否使用显式直通代码(PROC SQL 中的 EXECUTE 语句)?还是使用纯 SAS 代码并通过 libref 引用数据?
  • @Tom 我正在使用 Pass thru 和 EXECUTE 语句。我将编辑我的问题以使其更清楚。
  • 在您的不同类型的SQL语句之后,SQLXRCSQLXMSG自动宏变量包含哪些值?那些不能提供你想要的吗?如果没有,是否有一些 DB2 命令会告诉您上一个命令的结果?
  • @Tom 老实说,我只是不知道这些变量。好消息是,是的,SQLXRC 可以解决问题。当没有找到/修改数据时它等于 100,否则等于 0(当然,除非有不同的错误/警告)。如果您愿意,可以将其发布为答案,我会接受。

标签: sas db2 proc-sql


【解决方案1】:

检查远程执行后创建的automatic macro variables PROC SQL

SQLXMSG 包含描述性信息和特定于 DBMS 的返回 传递工具返回的错误代码。

注意:因为 SQLXMSG 宏变量的值可以包含 特殊字符(例如 &、%、/、* 和 ;),使用 %SUPERQ 宏 打印以下值时的函数:%put %superq(sqlxmsg);为了 有关 %SUPERQ 函数的信息,请参阅 SAS 宏语言: 参考。

SQLXRC 包含由 直通设施。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多