我只想通過僅使用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