【问题标题】:How to get number of rows affected by last several sql statement inside procedure in teradata?如何获取受teradata过程中最后几个sql语句影响的行数?
【发布时间】:2015-08-16 12:11:51
【问题描述】:

所以让我在过程中有 3 个合并语句:

CREATE PROCEDURE SP_Employee(OUT num_rows BIGINT)
BEGIN
    MERGE INTO t1
         USING t2
    ...;
    MERGE INTO a1
         USING b2
    ...;
    MERGE INTO c1
         USING d2
    ...;
END;

如何获取程序内部受影响的行数?我知道ACTIVE_COUNT,但我可以使用它吗? num_rows = ACTIVE_COUNT 会起作用,还是需要多次将其添加到变量中并初始设置为 0?

【问题讨论】:

  • 听起来很容易尝试...
  • 您需要将变量初始化为零,然后在每次执行 DML 语句后添加计数(使用ACTIVITY_COUNTGET DIAGNOSTICS ROW_COUNT)。
  • 非常感谢@dnoeth,您可以将其作为解决方案发布,所以我可以选择它)

标签: sql stored-procedures rows teradata


【解决方案1】:

您可以在每次合并后插入以下片段。

Merge INTO t1
      USING t2
.....;

SET lv_activity_count = activity_count;


SET lv_message = ' Number of rows merged in table1 is  '|| lv_activity_count ;
..

请同时初始化并声明变量。

【讨论】:

  • :) .. nono 签名在同一行 .. :)。已更正。
【解决方案2】:

您需要将变量初始化为零,然后在每次执行 DML 语句后添加计数(使用 ACTIVITY_COUNT 或 GET DIAGNOSTICS ROW_COUNT):

CREATE PROCEDURE SP_Employee(OUT num_rows BIGINT)
BEGIN
   DECLARE ac BIGINT DEFAULT 0;

    MERGE INTO t1
         USING t2
    ...;
   SET ac = ac + ACTIVITY_COUNT;

    MERGE INTO a1
         USING b2
    ...;
   SET ac = ac + ACTIVITY_COUNT;

    MERGE INTO c1
         USING d2
    ...;
   SET ac = ac + ACTIVITY_COUNT;

   SET num_rows = ac;

END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 2015-08-06
    • 2012-10-01
    • 2014-03-29
    • 2012-02-04
    • 1970-01-01
    相关资源
    最近更新 更多