检索更新的行数

Retrieve number of rows updated

低于动态 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 输出只是一个?我如何使用任何脚本来检索受影响的实际行数?

方法如下:

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>

你的代码应该是这样的:

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 returns “1”,那么您更新了一行 - 如果您对此不满意,请检查您的 UPDATE 语句。