写法类似于:
insert into table (a,b,c,d) values (?,?,?,?)
然后
for(1 to 100000)
{
   //循环,赋值,   
}
这样oracle 就只用编译一次sql就可以,加大效率.

解决方案 »

  1.   

    可以啊,
    要动态访问数据库,就动态地赋值(字符串的形式)
    要静态访问,就在数据控件的sql属性里直接设置
      

  2.   

    要么在oracle中写存储过程要么在delphi中循环执行sql.
      

  3.   

    to  jkx01whg(爱迪01)
    "要动态访问数据库,就动态地赋值(字符串的形式)"
        以字符串的形式拼凑sql.
        oracle会认为所有sql都不一样,所有sql都要编译一次再执行.这样效率很慢的哦.试过动态参数.但效果不佳.想了解一下:delphi 有预处理sql的写法吗?它能让oracle认为只是同一条sql.只编译一次.
      

  4.   

    str := 'insert into goods(goods_no,name,code) values (:goods_no,:name,:code)';    qry.CommandText := '';
    qry.CommandText := str;qry.Parameters.ParseSQL(qry.CommandText,true);for i := 1 to 8 do
        begin              
             try
                qry.Parameters[0].Value := 1000000+i;
                qry.Parameters[2].Value := 'test'+i;
                qry.Parameters[4].Value := 101;
                qry.Execute;
             except
                on e:exception do
                begin
                    showmessage(e.Message);
                end;
             end;
        end; 
    以上写法发现有错误
    qry.Parameters.ParseSQL(qry.CommandText,true);
    之后就不能执行了.
    想问一下 Parameters.ParseSQL 这样的写法有什么用呢?