我想使用forall
将记录插入MY_TABLE
。但是没有。的记录dat插入与每次测试运行不断变化!我认为这与循环计数器有关,但我无法弄清楚。这是代码片段。如何在pl/sql中正确使用记录表和记录表插入表
DECLARE
TYPE l_rec_type IS RECORD (
datakey SOURCE_TABLE.datakey%TYPE,
sourcekey SOURCE_TABLE.sourcekey%TYPE,
DESCRIPTION SOURCE_TABLE.DESCRIPTION%TYPE,
dimension_name SOURCE_TABLE.dimension_name%TYPE ,
data_type SOURCE_TABLE.data_type%TYPE
);
TYPE l_table_type IS TABLE OF l_rec_typeINDEX BY PLS_INTEGER;
l_table l_table_type;
l_cntr NUMBER;
BEGIN
FOR rec_dimname IN (SELECT dimension_name FROM dimension_table) LOOP
l_cntr1 := 1
FOR rec_source IN (SELECT * FROM source_table WHERE data_type IS NOT NULL) LOOP
l_table(l_ctr1).datakey := rec_source.datakey;
l_table(l_ctr1).sourcekey := rec_source.sourcekey;
l_table(l_ctr1).DESCRIPTION := rec_source.DESCRIPTION;
l_table(l_ctr1).dimension_name := rec_source.dimension_name;
l_table(l_ctr1).data_type := rec_source.data_type;
l_cntr1 := l_cntr1+1;
END LOOP
FORALL j IN l_table.FIRST..l_table.LAST
INSERT INTO my_table VALUES(l_table(j).datakey,
l_table(j).sourcekey,
l_table(j).DESCRIPTION,
l_table(j).dimension_name,
l_table(j).data_type,
1,
SYSDATE,
login_id
);
END LOOP;
END;
我在做什么错?使用for循环的正常插入插入5000条记录。我面临的另一个问题是如何使用forall来处理WHEN DUP_VAL_ON_INDEX和WHEN OTHERS异常。在正常循环中很容易。但我必须使用FORALL来快速插入。请帮忙!在你的代码
谢谢...我会尝试这..希望它解决了我的问题.. – Arcs 2012-03-05 20:30:56
是'l_table.delete'工作就像一个魅力..感谢您的帮助 – Arcs 2012-03-06 18:35:47
大!很高兴帮助:) – 2012-03-06 19:26:48