在动态SQL语句中获得被处理的记录行数

本文介绍如何使用SQL%ROWCOUNT系统变量在动态SQL语句中获取被处理的记录行数。通过实例演示了插入、更新及删除操作中该变量的应用。

在动态SQL语句中获得被处理的记录行数,可以简单的通过 SQL%ROWCOUNT 系统变量来实现。请参考下面的例子:
create table test (id number,name varchar2(10));
set serveroutput on;
DECLARE
  V_ROWCOUNT NUMBER;
  V_SQL      VARCHAR2(100);
  V_ID       test.ID%TYPE;
  V_NAME     test.NAME%TYPE;
BEGIN
  -- INSERT A ROW
  V_SQL := 'INSERT INTO TEST VALUES (:a1,:b1)';
  V_ID := 1;
  V_NAME := 'NAME1';
  EXECUTE IMMEDIATE V_SQL USING V_ID,V_NAME;
  V_ROWCOUNT := sql%rowcount;
  DBMS_OUTPUT.PUT_LINE(V_ROWCOUNT || 'row Inserted!' );
 
  V_ID := 2;
  V_NAME := 'NAME2';
  EXECUTE IMMEDIATE V_SQL USING V_ID,V_NAME;
  V_ROWCOUNT := sql%rowcount;
  DBMS_OUTPUT.PUT_LINE(V_ROWCOUNT || 'row Inserted!' );
  COMMIT;
  
  -- INSERT MANY ROWS
  V_SQL := 'INSERT INTO TEST SELECT * FROM test';
  EXECUTE IMMEDIATE V_SQL ;
  V_ROWCOUNT := sql%rowcount;
  DBMS_OUTPUT.PUT_LINE(V_ROWCOUNT || 'rows Inserted!' );
  COMMIT;
   
  --UPDATE
  V_NAME := 'ALLNAME';
  V_SQL := 'UPDATE  test  SET  name = :a1';
  EXECUTE IMMEDIATE V_SQL USING V_NAME;
  V_ROWCOUNT := sql%rowcount;
  DBMS_OUTPUT.PUT_LINE(V_ROWCOUNT || 'rows Updated!' );
  COMMIT;
   
  --DELETE
  V_ID := 1;
  V_SQL := 'DELETE FROM  TEST  WHERE  ID = :a1';
  EXECUTE IMMEDIATE V_SQL USING V_ID;
  V_ROWCOUNT := sql%rowcount;
  DBMS_OUTPUT.PUT_LINE(V_ROWCOUNT || 'rows Deleted!' );
  COMMIT;
END;

--执行结果:
1row Inserted!
1row Inserted!
2rows Inserted!
4rows Updated!
2rows Deleted!

PL/SQL procedure successfully completed

Executed in 0.03 seconds

SQL> SELECT * FROM test;

        ID NAME
---------- ----------
         2 ALLNAME
         2 ALLNAME

Executed in 0.02 seconds

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15779287/viewspace-675632/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15779287/viewspace-675632/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值