我只想通过仅使用SQL来知道表中插入了多少行。插入了多少行
例如:考虑2个表TT和TT1和我想用TT表像这样插入到TT1:
INSERT INTO TT1
SELECT *
FROM TT
WHERE 1=1;
上面的说法我想知道有多少行被插入后执行?仅通过使用Oracle SQL。有什么办法吗?
我只想通过仅使用SQL来知道表中插入了多少行。插入了多少行
例如:考虑2个表TT和TT1和我想用TT表像这样插入到TT1:
INSERT INTO TT1
SELECT *
FROM TT
WHERE 1=1;
上面的说法我想知道有多少行被插入后执行?仅通过使用Oracle SQL。有什么办法吗?
INSERT INTO TT1
SELECT *
FROM TT
WHERE 1=1;
插入的行数是由返回的行数选择声明。这只不过是表TT
的所有行的计数,因为1=1
总是真,基本上不过滤任何东西。
所以,只是做:
SELECT COUNT(*)
FROM TT;
更新添加了一个例子
例如,
比方说,我有一个表牛逼里面是空的:
SQL> create table t as select * from emp;
Table created.
我插入行从EMP表牛逼:
SQL> insert into t select * from emp;
14 rows created.
我想知道有多少行被插入,这只不过是由返回SELECT语句行。
SQL> select count(*) from emp;
COUNT(*)
----------
14
这是纯粹的SQL。即您执行了插入操作,现在想知道INSERT INTO..SELECT
实际插入了多少行。
但是,当你有很多insert语句的程序,即发生在PL/SQL,则需要SQL%ROWCOUNT
为每INSERT。
上面的select语句给出了TT中存在的总行数。但是我想要插入语句插入了多少行。 – user3074636
@ user3074636当您执行INSERT INTO ..SELECT时,插入到table_2中的行数与table_1上的select所获取的行数相同。查看更新。 –
PL/SQL表达式SQL%ROWCOUNT
可能会做你想做的。您需要将此语句描述为:
BEGIN
INSERT INTO TT1
SELECT *
FROM TT
WHERE 1=1;
DBMS_OUTPUT.PUT_LINE('Inserted ' || SQL%ROWCOUNT)
END;
换句话说,它需要进入PL/SQL代码块。
如果你能够使用PL/SQL,你可以不喜欢它
declare
i number;
begin
INSERT INTO TT1 SELECT * FROM TT WHERE 1=1;
i := sql%rowcount;
end;
否则就我知道的,只有它使用SELECT COUNT做,如果有此查询之前的记录方式只需运行SELECT COUNT两次,一次在执行之前,一次在查询之后,然后仅减去它们。
如果'tt1'在此之前为空,则在插入后运行'select count(*)from tt1'。所有其他解决方案将需要使用PL/SQL(所以它不再是“仅SQL”) –
根据API,可以使用get diagnostics row_count之类的东西? – jarlh