我正在将记录插入表中,并使用选择查询来获取值。
insert into my_table (....)
select a.name, b.age, c.id, d.address
from table1 a, table2 b, table3 c, table4 d
where a.age=23 and d.addredd like '%street%';
我想比较select_Query的rowcount和my_table的rowcount(插入后)。
如何在不花费更多处理时间的情况下获取两者的行数。
由于
答案 0 :(得分:0)
要获得插入行的总数,您可以使用SQL%ROWCOUNT
。
DECLARE
BEGIN
insert into my_table (....)
select a.name, b.age, c.id, d.address
from table1 a, table2 b, table3 c, table4 d
where a.age=23 and d.addredd like '%street%';
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
END;
修改强>
其他方法是创建一个返回该值的函数:
CREATE OR REPLACE FUNCTION get_count_inserted
RETURN NUMBER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
RESULT NUMBER;
BEGIN
insert into my_table (....) -- Your query
select a.name, b.age, c.id, d.address
from table1 a, table2 b, table3 c, table4 d
where a.age=23 and d.addredd like '%street%';
RESULT := SQL%ROWCOUNT; --getting the count
COMMIT;
RETURN RESULT; --returning result
END;
创建功能后,您可以像这样查询:
SELECT get_count_inserted FROM DUAL; --this will return total of rows inserted
答案 1 :(得分:0)
如何在不花费更多处理时间的情况下获取两者的行数。
INSERT 之前和之后 COUNT 的时间将少于您发布问题的时间: - )
所以,不要让事情变得复杂,只需在INSERT进入表之前和之后查询COUNT的ROWS。无需将行计数为select,因为insert之前和之后的行数差异与select的行数相同。如果您仍想验证,可以选择选择并检查差异,结果会相同。
不必要地引入PL / SQL只是为了使用SQL℅ROWCOUNT并不是一个好主意。普通插入应该在纯SQL中完成。