插入了多少行

时间:2015-10-15 11:51:05

标签: sql oracle

我只想知道仅使用SQL在表中插入了多少行。

例如:考虑2个表TT和TT1,我想使用TT表插入TT1,如下所示:

INSERT INTO TT1 
SELECT * 
FROM TT 
WHERE 1=1;

执行上面的语句后我想知道插入了多少行?仅使用Oracle SQL。有什么办法吗?

3 个答案:

答案 0 :(得分:2)

PL / SQL表达式SQL%ROWCOUNT可以做你想要的。您需要将其标记为:

BEGIN
    INSERT INTO TT1 
    SELECT * 
    FROM TT 
    WHERE 1=1;

    DBMS_OUTPUT.PUT_LINE('Inserted ' || SQL%ROWCOUNT)
END;

换句话说,它需要进入PL / SQL代码块。

答案 1 :(得分:1)

INSERT INTO TT1 
SELECT * 
FROM TT 
WHERE 1=1;

插入的行数是 SELECT 语句返回的行数。这只是表TT的所有行的计数,因为1=1总是 TRUE ,基本上不会过滤任何内容。

所以,就这样做:

SELECT COUNT(*)
FROM TT;

更新添加了一个示例

例如,

假设我的表格 T 为空:

SQL> create table t as select * from emp;

Table created.

我将 EMP 表格中的行插入 T

SQL> insert into t select * from emp;

14 rows created.

我想知道插入了多少行,这只是 SELECT 语句返回的行。

SQL> select count(*) from emp;

  COUNT(*)
----------
        14

这是纯粹的 SQL 。即你执行了一个插入,现在想知道INSERT INTO..SELECT实际插入了多少行。

但是,当您以编程方式(即 PL / SQL )发生大量插入语句时,每 INSERT 都需要SQL%ROWCOUNT

答案 2 :(得分:0)

如果你能够使用PL / SQL,你可以像

那样做
declare
  i number;
begin
  INSERT INTO TT1 SELECT * FROM TT WHERE 1=1;
  i := sql%rowcount;
end;

另外据我所知只有办法才能使用SELECT COUNT,如果在此查询之前有记录只运行 SELECT COUNT 两次,一次执行前和一次查询后再减去它们。