我不是一个数据库人,我的大部分数据库工作都是MySQL,所以请原谅我,如果这个问题中的某些内容非常天真.
我需要从一个有大约1亿行的Oracle表中删除550万行.我有一个临时表中需要删除的行的ID.如果它只是几千行,我会这样做:
DELETE FROM table_name WHERE id IN (SELECT id FROM temp_table);
COMMIT;
Run Code Online (Sandbox Code Playgroud)
有什么我需要注意和/或做的不同,因为它是550万行?我想做一个循环,这样的事情:
DECLARE
vCT NUMBER(38) := 0;
BEGIN
FOR t IN (SELECT id FROM temp_table) LOOP
DELETE FROM table_name WHERE id = t.id;
vCT := vCT + 1;
IF MOD(vCT,200000) = 0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
END;
Run Code Online (Sandbox Code Playgroud)
首先 - 这是做我认为的 - 一次批量提交20万次?假设它是,我仍然不确定生成550万个SQL语句,批量提交200,000,还是有一个SQL语句并一次提交所有更好.
想法?最佳做法?
编辑:我运行了第一个选项,单个删除语句,它只需要2个小时才能完成开发.基于此,它排队等待在生产中运行.
您在Rails应用程序上使用Selenium测试时使用了哪些数据?你从装置加载?使用现有的dev db?使用单独的(非固定)数据库?
我在考虑我的选择.我有一个带有大型Selenium测试套件的Rails应用程序,它运行在Selenium Grid的修改版本上.现在,部分过程是在测试套件运行之前加载一大套灯具.这是很多数据.其中大部分是从我们的生产数据库导出的报告信息.当我最初设置它时,我将数据从Oracle导出到yaml.
现在一些报告表中的模式发生了变化,所以当然我必须重新生成夹具数据.有太多的东西,手动编辑文件是不值得的.但是,为每一个小的架构变化进行重新生成似乎效率低下 - 更不用说这是记住要做的又一步.有没有更好的办法?
编辑:我原本打算在每次测试之前加载灯具,并在每次测试后卸载它们,就像常规的Rails测试一样.但由于此报告数据,加载灯具大约需要15分钟.有200多个测试,套件每12小时运行一次.我可以弯曲太空船长!
编辑2:我也同意拥有这么大的装置是难闻的气味.不过,我不确定如何削减它,因为报告汇总了大量数据,而硒测试的大部分价值在于他们测试报告.
即使它只是一小组数据,但它仍然是另一套与架构变化保持协调的集合.(我们有一个单独的,较小的单元,功能和[Rails]集成测试集.)
这让我回到原来的问题 - 除了手工制作还是记得每次重新制作它们之外还有其他选择吗?
我遇到了这种叫做记录的方法,Ryan bates在他的authlogic Railscast中使用它并且似乎无法理解它的作用.我已经阅读了文档,但我似乎无法理解该帮助程序是如何有用的.
def current_user
return @current_user if defined?(@current_user)
current_user_session && current_user_session.record
end
Run Code Online (Sandbox Code Playgroud)
我想知道的是,这只是从数据库中获取记录,为什么它与从数据库中获取数据的标准方式不同.
谢谢.
当我使用Rails脚手架时,我无法访问页面来编辑字段.它向我展示了所有DATE字段的某种问题.这是错误:
can't convert Symbol into String
Extracted source (around line #124):
121: </p>
122: <p>
123: <%= f.label :dataDeCadastro %><br />
124: <%= f.date_select :dataDeCadastro %>
Run Code Online (Sandbox Code Playgroud)
和stackTrace的一部分:
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:564:in `include?'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:564:in `select_date'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:832:in `to_date_select_tag_without_error_wrapping'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/active_record_helper.rb:268:in `to_date_select_tag'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:179:in `date_select'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:889:in `date_select'
app/views/usuarios/edit.html.erb:124
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/form_helper.rb:313:in `fields_for'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/form_helper.rb:253:in `form_for'
app/views/usuarios/edit.html.erb:3
Run Code Online (Sandbox Code Playgroud)
和模型sql:
CREATE TABLE `usuarios` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`usuario` varchar(50) DEFAULT NULL,
`recebeNews` smallint(1) DEFAULT NULL,
`cidade` varchar(30) DEFAULT NULL,
`email` varchar(40) DEFAULT NULL,
`endereco` varchar(70) DEFAULT NULL,
`estado` varchar(3) DEFAULT NULL,
`cep` …Run Code Online (Sandbox Code Playgroud)