Plsql 为另一个表中的每一行在一个表中插入多行
我有一个临时表,我想用它来填充另一个表。对于temp表中的每一行,我希望执行一个函数,该函数可能会导致为另一个表生成一个或多个记录Plsql 为另一个表中的每一行在一个表中插入多行,plsql,oracle11g,Plsql,Oracle11g,我有一个临时表,我想用它来填充另一个表。对于temp表中的每一行,我希望执行一个函数,该函数可能会导致为另一个表生成一个或多个记录 DECLARE CURSOR cur IS SELECT col1, col2, col3 FROM table1; BEGIN FOR rec IN cur LOOP -- Pseudo Code Follows FOR result IN somefunction(rec.col1, rec.col2)
DECLARE
CURSOR cur IS SELECT col1, col2, col3 FROM table1;
BEGIN
FOR rec
IN cur
LOOP
-- Pseudo Code Follows
FOR result
IN somefunction(rec.col1, rec.col2)
INSERT INTO table2
(col1, col2, col3, calculated_value)
VALUES
(rec.col1, rec.col2, rec.col3, result.calculated_value)
END LOOP;
END LOOP;
END;
这样做有意义吗
Oracle PL/SQL函数是否可以返回类似这样的iterable
我通常会用Perl或Python来实现这一点,但由于所有数据都在Oracle中,如果可以在数据库中完成的话,我不想浪费时间检索数据、计算数据,然后插入数据。临时表将有大约75000行,我预计第二个表将有550000行。仅在Oracle中创建一次临时表(一次且仅一次,不是每次会话) 插入其中的行仅对会话可见,并在会话结束(或事务结束,具体取决于您使用的“on COMMIT”子句)时自动删除。 例如: 现在让我们来谈谈你的情况:
CURSOR C
IS
SELECT col1, col2, col3 FROM temp_table;
X_calculated_value VARCHAR2 (1000);
BEGIN
--Your temporary table should be filled in the session
FOR I IN C
LOOP
select somefunction(I.col1, I.col2) into X_calculated_value from dual;
IF calculated_value ..YourCodition
THEN
INSERT INTO table2
(col1, col2, col3, calculated_value)
VALUES
(I.col1, I.col2, I.col3, X_calculated_value)
ELSE
//do something also
END IF;
END LOOP;
END;
我的问题更多的是关于功能。一个函数能否返回多个结果?如果可能,您如何迭代结果以插入表2中?您可以使用如下记录方式从函数中获取多个值:创建或替换类型记录\类型(x1号、x2号、x3号);然后您的函数:创建或替换函数get_rec_value return Record_Type作为My_Record_Type;开始从表2中的My_记录中选择X1、X2、X3,将您的条件置于其中,以获得一个RecResult;返回(我的记录);终止
CURSOR C
IS
SELECT col1, col2, col3 FROM temp_table;
X_calculated_value VARCHAR2 (1000);
BEGIN
--Your temporary table should be filled in the session
FOR I IN C
LOOP
select somefunction(I.col1, I.col2) into X_calculated_value from dual;
IF calculated_value ..YourCodition
THEN
INSERT INTO table2
(col1, col2, col3, calculated_value)
VALUES
(I.col1, I.col2, I.col3, X_calculated_value)
ELSE
//do something also
END IF;
END LOOP;
END;