检索更新的行数

时间:2018-04-18 02:32:06

标签: oracle rows dynamic-sql rowcount

动态SQL下面正在更新1319行。

l_sql := 'UPDATE '||l_prefix||'CRS_CUSTOMERS SET CUSTOMER_SOURCE_REF_ID = :REF_ID EXECUTE IMMEDIATE l_sql USING i.CUSTOMER_REF_ID, i.CUSTOMER_ID;

TO_CHAR(SQL%ROWCOUNT); rowcount输出只有一个?如何使用任何脚本来检索受影响的实际行数?

2 个答案:

答案 0 :(得分:0)

以下是:

SQL> declare
  2    l_sql varchar2(200);
  3    l_cnt number;
  4  begin
  5    l_sql := 'update emp set comm = 100 where deptno = 20';
  6    execute immediate 'begin ' || l_sql ||'; :x := sql%rowcount; end;' using out l_cnt;
  7    dbms_output.put_line('Updated ' || l_cnt || ' rows');
  8  end;
  9  /
Updated 5 rows

PL/SQL procedure successfully completed.

SQL>

答案 1 :(得分:0)

您的代码应该是这样的:

l_sql := 'UPDATE '||l_prefix||'CRS_CUSTOMERS SET CUSTOMER_SOURCE_REF_ID = :REF_ID';
EXECUTE IMMEDIATE l_sql USING i.CUSTOMER_REF_ID, i.CUSTOMER_ID;
dbms_output.put_line('Updated ' || SQL%ROWCOUNT || ' rows');

但是,它不起作用,因为您只指定了一个绑定变量(:REF_ID),但是您提供了两个值(i.CUSTOMER_REF_IDi.CUSTOMER_ID)。绑定变量和值必须匹配。

如果SQL%ROWCOUNT返回“1”,那么您更新了一行 - 如果您对此不满意,请检查您的UPDATE语句。