delphi 有预处理sql的写法不? for oracle

ib915 2005-12-19 03:13:33
写法类似于:
insert into table (a,b,c,d) values (?,?,?,?)
然后
for(1 to 100000)
{
//循环,赋值,
}
这样oracle 就只用编译一次sql就可以,加大效率.
...全文
119 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
要么在oracle中写存储过程要么在delphi中循环执行sql.
ib915 2005-12-20
  • 打赏
  • 举报
回复
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 这样的写法有什么用呢?
ib915 2005-12-20
  • 打赏
  • 举报
回复
to jkx01whg(爱迪01)
"要动态访问数据库,就动态地赋值(字符串的形式)"
以字符串的形式拼凑sql.
oracle会认为所有sql都不一样,所有sql都要编译一次再执行.这样效率很慢的哦.

试过动态参数.但效果不佳.想了解一下:delphi 有预处理sql的写法吗?它能让oracle认为只是同一条sql.只编译一次.
jkx01whg 2005-12-19
  • 打赏
  • 举报
回复
可以啊,
要动态访问数据库,就动态地赋值(字符串的形式)
要静态访问,就在数据控件的sql属性里直接设置

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧