0
我正在创建一个可以接受2个表名的动态过程。从一个表中获取记录,并在某个记录(让我们说100条记录)后,我必须发出提交命令。 tabName和temp_tabName都是相同的。因为我在第一个表中有数十亿条记录,所以我在每10000条记录之后执行提交以摆脱撤消表空间问题。动态获取记录Oracle
到目前为止我所做的是:
CREATE OR REPLACE PROCEDURE MyProdecure (
tabName IN USER_TABLES.table_name%TYPE,
temp_tabName IN USER_TABLES.table_name%TYPE
)
IS
v_sql VARCHAR2 (100) := 'select * from ' || tabName;
TEMP_CURSOR SYS_REFCURSOR;
COUNT NUMBER (6) := 0;
BEGIN
OPEN TEMP_CURSOR FOR v_sql;
LOOP
FETCH TEMP_CURSOR INTO V_ROW;
--=================================================================================
/*
* I need the code here to fetch the 100 record from TEMP_CURSOR into a Variable
* and insert into the second table. or one record increment the count and if
* count>= 100 commit
*What would be the data type of V_ROW. How to fetch the data from V_ROW and complete the insert into command.
*/
--================================================================================
EXIT WHEN TEMP_CURSOR%NOTFOUND;
END LOOP;
CLOSE TEMP_CURSOR;
END MyProdecure;
我不确定它是否正是你想要的,但你可以做一个如果获得{temp_cursor%rowcount = 100}。这会让你获得第100行阅读的时刻。 –
为什么每次一个?你为什么不能一次处理整个设备?您是否对每个100条记录进行额外的处理?在循环中这样做似乎效率低下,除非你有额外的限制。 – xQbert
这是一个功课题吗?一般来说,分批进行并不是一种好的做法。 – Boneist