我给你简单改写一下,你参考一下
declare
Type Type_AA Is Table Of table_2.aa%Type Index By Binary_Integer
a_Type_AA Type_AA
cursor cur_ALL is select b.aa from table_1 a,table_2 b where a.id=b.id
begin
open cur_ALL
loop
fetch cur_ALL Bulk Collect Into a_Type_AA limit 1000
forall i in 1..a_Type_AA.count
updae table_1 a set a.aa=a_Type_AA(i) where a.id in (select c.id from table_2 c) and trim(a.aa) is null
commit
exit when cur_ALL%notfound or cur_ALL%notfound is null
end loop
close cur_ALL
exception
when others then
if cur_ALL%isopen then
close cur_ALL
end if
end
这样每次只会更新1000条,而且是批量插入,没插入1000条更新一次
但是我建议你的sql要优化一下where a.id in (select c.id from table_2 c)这部分相当影响性能。
在mysql中,每个数据库最多可创建20亿个表,一个表允许定义1024列,每行的最大长度为8092字节(不包括文本和图像类型的长度)。当表中定义有varchar、nvarchar或varbinary类型列时,如果向表中插入的数据行超过8092字节时将导致Transact-SQL语句失败,并产生错误信息。SQLServer对每个表中行的数量没有直接限制,但它受数据库存储空间的限制。每个数据库的最大空间1048516TB,所以一个表可用的最大空间为1048516TB减去数据库类系统表和其它数据库对象所占用的空间。
每次插入数据库之间,先查看数据库中的数据的数目,然后做限制。我猜你的意思不是上面那样的,你应该是避免重复提交吧,
‘这个你在JS端做限制,当用户点击submit时候,要么隐藏submit要么让submit点击失效
或者设置cookie如果存在coolie不允许重复提交,还可以存库检验
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)