写了一个再简单不过的存储过程:SQL> CREATE TABLE TBL(ID NUMBER PRIMARY KEY,NAME VARCHAR2(30));Table createdSQL> 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;
哪位大虾能够探讨一下这个问题?

解决方案 »

  1.   

    循环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归档模式,也同样提高数据修改的效率.
      

  2.   

    我自己写了一个程序,尝试使用delphi插入数据,其实效果非常慢.后来我直接使用delphi先把要插入的数据写到本地文件中,再用写一个.ctl文件,最后利用delphi自动调用Oracle的sqlldr装载数据,这个效果不错,一分钟插入十几万条数据不成问题.