首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi+Oracle插入效率有关问题

2012-03-08 
delphi+Oracle插入效率问题写了一个再简单不过的存储过程:SQLCREATETABLETBL(IDNUMBERPRIMARYKEY,NAMEVAR

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装载数据,这个效果不错,一分钟插入十几万条数据不成问题.

热点排行