delphi+Oracle插入效率问题
写了一个再简单不过的存储过程:
SQL> CREATE TABLE TBL(ID NUMBER PRIMARY KEY,NAME VARCHAR2(30));
Table created
SQL> CREATE OR REPLACE PROCEDURE MYTESTPRO
2 AS
3 BEGIN
4 INSERT INTO TBL(ID,NAME) VALUES(AISEC.NEXTVAL, 'MYTEST ');
5 END;
6 /
目的是为了测试delphi调用oracle存储过程插入纪录的效率
我用adoconnection+ADOStoredProc
还有用OraSession+OraStoredProc
循环call存储过程,效率非常低,每秒钟几条纪录,
但我在Pl/SQL里面直接Call存储过程,非常快,
delphi这么循环调用存储过程:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to 5000-1 do
begin
orastore.ExecProc;
end;
end;
哪位大虾能够探讨一下这个问题?
[解决办法]
循环call存储过程.每次循环都是一次数据库的交互.这是很浪费时间的.
我处理都是在程序中写
SQL.Add( 'insert into table values())
SQL.Add( 'insert into table values())
SQL.Add( 'insert into table values())
然后一起执行.
还有orcale SQL语句有这种
insert into table1(f1,f2) select f3,f4 from table2
这样可以添加一个数据集.
还有关闭orcale归档模式,也同样提高数据修改的效率.
[解决办法]
我自己写了一个程序,尝试使用delphi插入数据,其实效果非常慢.后来我直接使用delphi先把要插入的数据写到本地文件中,再用写一个.ctl文件,最后利用delphi自动调用Oracle的sqlldr装载数据,这个效果不错,一分钟插入十几万条数据不成问题.