我只想知道仅使用SQL在表中插入了多少行。
例如:考虑2个表TT和TT1,我想使用TT表插入TT1,如下所示:
INSERT INTO TT1
SELECT *
FROM TT
WHERE 1=1;
执行上面的语句后我想知道插入了多少行?仅使用Oracle SQL。有什么办法吗?
答案 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 两次,一次执行前和一次查询后再减去它们。