oracle中应用循环语句快速插入数据(oracle 中循环插入)
Oracle中应用循环语句快速插入数据
往数据库中插入大量数据时,常常会面临到插入速度十分缓慢的问题。这时候,我们可以考虑使用循环语句批量插入数据,以提高插入效率。本文将详细介绍在Oracle中应用循环语句快速插入数据的方法。
一、建立示例表
我们首先需要建立一张示例表,以便演示插入数据的效果。示例表的字段包括ID、NAME、SEX、AGE和ADDRESS,对应的数据类型都为VARCHAR2。
建立示例表的SQL语句如下:
CREATE TABLE STUDENTS
( ID VARCHAR2(10),
NAME VARCHAR2(50), SEX VARCHAR2(10),
AGE VARCHAR2(10), ADDRESS VARCHAR2(100)
);
二、使用循环语句批量插入数据
在Oracle中,我们可以使用 FOR LOOP 循环语句批量插入数据。例如,我们希望往上述的示例表中插入1万条数据,其中ID为连续的数字,NAME和SEX为固定值,AGE为随机的数字,ADDRESS为固定的字符串。我们可以编写如下SQL语句:
DECLARE
BEGIN_ID NUMBER := 1; END_ID NUMBER := 10000;
BEGIN FOR i IN BEGIN_ID..END_ID LOOP
INSERT INTO STUDENTS VALUES (i, 'John', 'Male', DBMS_RANDOM.VALUE(18, 30), 'New York');
END LOOP; COMMIT;
END;
上述代码中,我们定义了两个变量BEGIN_ID和END_ID,分别表示插入ID的起始值和结束值。然后,我们使用FOR LOOP语句来循环插入数据,将ID递增1,将NAME和SEX设为固定值”John”和”Male”,将AGE使用DBMS_RANDOM.VALUE函数随机生成18~30之间的数字,将ADDRESS设为固定字符串”New York”。在循环结束后,我们使用COMMIT语句提交数据。
三、使用数组批量插入数据
除了使用循环语句,我们还可以使用数组批量插入数据,以进一步提高插入效率。例如,我们可以将要插入的数据分为1000条一组,每次插入1000条数据。具体SQL语句如下:
DECLARE
TYPE ID_LIST IS TABLE OF VARCHAR2(10); TYPE NAME_LIST IS TABLE OF VARCHAR2(50);
TYPE SEX_LIST IS TABLE OF VARCHAR2(10); TYPE AGE_LIST IS TABLE OF VARCHAR2(10);
TYPE ADDRESS_LIST IS TABLE OF VARCHAR2(100); V_ID ID_LIST := ID_LIST();
V_NAME NAME_LIST := NAME_LIST(); V_SEX SEX_LIST := SEX_LIST();
V_AGE AGE_LIST := AGE_LIST(); V_ADDRESS ADDRESS_LIST := ADDRESS_LIST();
BEGIN FOR i IN 1..10000 LOOP
V_ID.EXTEND; V_NAME.EXTEND;
V_SEX.EXTEND; V_AGE.EXTEND;
V_ADDRESS.EXTEND; V_ID(i) := i;
V_NAME(i) := 'John'; V_SEX(i) := 'Male';
V_AGE(i) := DBMS_RANDOM.VALUE(18, 30); V_ADDRESS(i) := 'New York';
IF MOD(i, 1000) = 0 THEN FORALL j IN 1..V_ID.COUNT
INSERT INTO STUDENTS VALUES (V_ID(j), V_NAME(j), V_SEX(j), V_AGE(j), V_ADDRESS(j));
COMMIT; V_ID.DELETE;
V_NAME.DELETE; V_SEX.DELETE;
V_AGE.DELETE; V_ADDRESS.DELETE;
END IF; END LOOP;
END;
上述代码中,我们定义了五个类型为表类型的变量,分别表示ID、NAME、SEX、AGE和ADDRESS字段。然后,我们使用循环语句将要插入的数据分为1000条一组,每次插入1000条数据。在循环内部,我们使用V_ID.EXTEND、V_NAME.EXTEND等函数来扩展数组的长度,并将要插入的数据存入对应的数组中。当插入数据的数量达到1000条时,我们使用FORALL语句批量插入数据,并使用DELETE函数清空数组中的数据。在循环结束后,我们使用COMMIT语句提交数据。
通过上述方法,我们可以快速、高效地往Oracle数据库中插入大量数据。如果您需要插入更大的数据量,可以根据实际情况调整批量插入的数据量。