小编Sar*_*Mei的帖子

删除Oracle中的大量数据

我不是一个数据库人,我的大部分数据库工作都是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个小时才能完成开发.基于此,它排队等待在生产中运行.

sql oracle plsql

14
推荐指数
4
解决办法
5万
查看次数

固定装置和Selenium和Rails(哦,我的?)

您在Rails应用程序上使用Selenium测试时使用了哪些数据?你从装置加载?使用现有的dev db?使用单独的(非固定)数据库?

我在考虑我的选择.我有一个带有大型Selenium测试套件的Rails应用程序,它运行在Selenium Grid的修改版本上.现在,部分过程是在测试套件运行之前加载一大套灯具.这是很多数据.其中大部分是从我们的生产数据库导出的报告信息.当我最初设置它时,我将数据从Oracle导出到yaml.

现在一些报告表中的模式发生了变化,所以当然我必须重新生成夹具数据.有太多的东西,手动编辑文件是不值得的.但是,为每一个小的架构变化进行重新生成似乎效率低下 - 更不用说这是记住要做的又一步.有没有更好的办法?

编辑:我原本打算在每次测试之前加载灯具,并在每次测试后卸载它们,就像常规的Rails测试一样.但由于此报告数据,加载灯具大约需要15分钟.有200多个测试,套件每12小时运行一次.我可以弯曲太空船长!

编辑2:我也同意拥有这么大的装置是难闻的气味.不过,我不确定如何削减它,因为报告汇总了大量数据,而硒测试的大部分价值在于他们测试报告.

即使它只是一小组数据,但它仍然是另一套与架构变化保持协调的集合.(我们有一个单独的,较小的单元,功能和[Rails]集成测试集.)

这让我回到原来的问题 - 除了手工制作还是记得每次重新制作它们之外还有其他选择吗?

ruby selenium ruby-on-rails fixtures

8
推荐指数
1
解决办法
3304
查看次数

Authlogic记录方法.这是做什么的

我遇到了这种叫做记录的方法,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)

我想知道的是,这只是从数据库中获取记录,为什么它与从数据库中获取数据的标准方式不同.

谢谢.

ruby activerecord ruby-on-rails authlogic

6
推荐指数
1
解决办法
857
查看次数

DATE字段的Rails脚手架中的问题

当我使用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)

datetime ruby-on-rails date scaffolding scaffold

1
推荐指数
1
解决办法
4737
查看次数