- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
假设有一个非常大的 SQL 数据库 - 数百个表、数千个字段、数百万条记录。这个数据库是荷兰语的。我想将某些字段的所有值翻译成英文以用于测试目的。它不必完全正确,它必须对测试人员来说是可读的。
我知道大部分文本都存储在整个数据库中名为“名称”和“描述”的字段中。或者基本上所有表中所有类型为 NVARCHAR(任意长度)的字段都将是翻译的候选者。枚举所有的表和字段实在是太麻烦了,我想避免它,所以只翻译这些字段就足够了。
有没有一种方法可以遍历所有表格并为所有记录检索特定字段的值并将其替换为英文翻译?这可以仅使用 SQL 来完成吗?
数据库服务器无关紧要——我可以将数据库安装在 MSSQL、Oracle 或任何选择的服务器上。使用谷歌或其他一些自动工具翻译文本就足够了。当然这个工具必须有一个API才能自动使用。
有没有人有类似操作的经验?
câu trả lời hay nhất
在伪代码中,这是我使用 Oracle 会做的:
Query AllFieldsQuery = new Query(connection,"Select table_name, column_name
from user_tab_columns where column_name='name' OR column_name='description'");
AllFieldsQuery.ExecuteReader();
它给你这样的东西:
表名 | COLUMN_NAME
表1 |姓名
表2 |姓名
表2 |说明
...... | ............
Foreach TableColumnLine
Query FieldQuery = new Query("Select DISTINCT "+COLUMN_NAME+" AS ToTranslate
from +"TABLE_NAME);
Create a new parametrized query :
MyParamQuery = new ParamQuery(connection, UPDATE TABLE_NAME SET COLUMN_NAME =
@Translated WHERE COLUMN_NAME = @ToTranslate);
Foreach ToTranslateLine
@Translated = GetTranslationFromGoogle(@ToTranslate);
MyParamQuery.Execute(ToTranslate = @ToTranslate, Translated = @Translated);
End Foreach ToTranslateLine
End Foreach TableColumnLine
AllFieldsQuery 为您提供了您需要更新的所有表中的所有字段。
FieldQuery 为您提供了所有需要翻译的文本。
MyParamQuery 更新这些文本中的每一个。
这可能是一个很长的过程,这也取决于你花在翻译上的时间。我建议至少按表进行提交,并打印一份报告,告诉您每个表是否一切正常,因为您可以在 API 中使用排除函数,从第一个查询中排除字段和/或表因为之前已经翻译过了。
.
增强功能:编写文件并在翻译结束时执行它,而不是执行 sql 更新。
如果它太长,它可能会太长,而不是直接执行 sql UPDATES,你宁愿写一个包含所有更新的文件,在你 foreach 之后,去获取文件并在 SQL 中使用它.
.
增强:多线程版本
您的 API 的多线程版本可以让您赢得一些翻译时间,您将所有要翻译的结果放入一个同步队列中,然后使用一个线程池来翻译队列,并将所有翻译后的消息放入另一个队列中同步队列,用于写入 SQL 输出文件或启动更新。
关于database - 如何粗略地自动翻译一次数据库的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4540107/
考虑一个包含数百万个对象的列表,例如: case class Point(val name:String, val x:Double, val y:Double) 对于给定的点目标,我需要选择最接近目
我开始考虑如何将 RTL 字符串(即阿拉伯语、希伯来语)transliterate 转换为 LTR 字符串(即声音/字母的 romanization)。如果是 LTR -> LTR,则相对简单,但对于
我的应用程序只需要非常粗略的位置数据,所以我最初将我的 list 权限设置为 ACCESS_COARSE_LOCATION,并为 NETWORK_PROVIDER 设置了一个位置监听器。这为我提供了我
Tôi là một lập trình viên xuất sắc, rất giỏi!