我有一个表,其中包含存储为 varchars 的选择查询和插入查询。我必须执行选择查询并使用插入查询使用过程插入选择查询的结果。现在我正在执行立即和批量将选择查询收集到 varchars 表中。
在此之后,我转到 vartable 的每一行并获取值并将其放入插入查询中。我有许多对许多表的选择和插入查询。所以这必须动态完成。我的问题是,有没有更好的方法来存储选择查询的结果?除了使用 varchar 表?因为选择查询的结果集可能有数百万条记录,这可能会导致问题。使用嵌套表类型并在其上使用EXTEND会解决问题吗?
PROCEDURE SEL_INS
AS
CURSOR C
IS
SELECT
SELEQRY SELQRY,
INSQUERY INSERTQRY,
cols COLS
FROM TAB1;
selqry VARCHAR2(1000);
insqry VARCHAR2(1000);
tab1 vartable:=vartable();
cols NUMBER;
BEGIN
tab1:=vartable(NULL);
FOR X IN C
LOOP
selqry:= X.SELQRY;
cols:=X.COLS;
EXECUTE immediate selqry bulk collect INTO tab1;
-- select statement is concatenated before executing. so that each index has one record
--with values separated by commas
--- a sample column in tab1 will have values like (abc,abc1,abc2)
FOR i IN 1..tab1.count
LOOP
insqry :=X.INSERTQRY;
--- insert query will have values like insert into tab2 values('abc,'abc1','abc2')
EXECUTE immediate insqry;
END LOOP;
END LOOP;
END SEL_INS;
vartable 是 varchars2(4000) 类型的表