span8
span4
有许多方法来“让你的数据库做的工作”,我们就来看看如何使用FME来进行更有效的写甲骨文。
当写入使用FME数据库,如果有对受到侵犯的表约束可能会出现错误。约束是限制在一个数据库中的列的可能值的规则。典型的约束包括不为空,独特,和键(主键和外)。下面列出的演习将涉及应对因写入到一个外键连接表上的负载失效的方法。
虽然这个练习使用的Oracle数据库,这些概念和讨论可以应用于其它数据库,如方法PostgreSQL公司/邮政总局和SQL Server。
这个练习的目的是显示你的选项写有约束的数据库表,比如一个外键约束。在这个例子中,你会加载一个自来水管网(WMAINS),并创建一个具有管制造商属性的资产表(WASSETS)。这两个表通过一个外键约束(称为WMAIN_WASSETS)有关。
运行工作区
1。打开工作区:DatabaseWrite-Start.fmw。运行。
工作区被写入Oracle中两个连接的表。父表(WASSETS)已MANUFACTURERID作为主键和子表(WMAIN)具有MAINID与MANUFACTURERID主键作为外键。
该工作空间无法抛出以下错误:
| ERROR |语句的执行`INSERT INTO “WMAIN”( “MAINID”, “有效”,...)VALUES( “MAINID”, “有效”,...)”并没有成功;错误是`ORA-02291:完整性约束(WMAIN_WASSETS)违反 - 未找到”父键。(服务器类型=`ORACLE8I”中ServerName =`,用户名=` ',密码=`***',数据库名=`')
因为在WMAIN表的外键约束(称为WMAIN_WASSETS)受到侵犯时发生错误。为了满足约束,你必须写有外键的子表之前写父表。
下面的例子说明不同的方法可以解决这个问题,并写入相关的表。
示例1-使用FeatureHolder
该FeatureHolder用于保存指向子表(WMAIN)的功能。由于只有被写入到父表(WASSETS)的一些功能,它能够完成写的FeatureHolder释放功能之前。这有效地阶段的工作流程。亚搏在线
1。运行这个例子之前,你需要清理数据库表。删除并重新使用SQLCreator变压器的表。打开变压器属性,选择SQL语句并选择Run……然后取消退出变压器属性。
2.添加特征拥有者在wmain桌子前。
三。运行工作区并检查日志文件和结果。
featureholder对于具有较少特征的工作空间非常有用。如果有大量记录被写入表格并保存在FeatureHolder中,则会影响整体性能。
示例2-使用连接运行时顺序
可以使用连接运行时顺序选项来控制退出变压器的功能的顺序。此示例使用连接运行时顺序来确保首先插入父记录。
1。运行这个例子之前,你需要清理数据库表。删除并重新使用SQLCreator变压器的表。打开变压器属性,选择SQL语句并选择Run……然后取消退出变压器属性。
2.从上一步中删除FeatureHolder Transformer。
三。通过右击退出ExtMeTaMaGER的输出连接器之一设置连接运行时顺序。确保首先连接wasset。这将确保在相应的wmain记录之前插入wasset记录,确保满足wmain约束。
四。将每个事务的功能设置为1。必须使用1的转换间隔来确保在插入wmain记录之前已提交wassets记录。
5个。运行翻译。
如您所见,将事务间隔设置为1对性能有很大的影响,因为对编写的每个功能都执行提交。它确实确保记录在写入子表之前写入父表。
示例3-使用FeatureWriter
featurewriter转换器是另一种写入数据的方式。将写入操作移到工作区工作流中,可以使您在编写特征类型的顺序以及如何预处理和后处理数据方面具有亚搏在线更大的灵活性。
在本例中,您将使用sql调用禁用并启用wmain_wassets外键约束。在此期间,您将加载数据。
1。使用sqlcreator删除并创建表,如上面的示例2所述,这样您就可以从头开始了。
2.禁用或删除Oracle编写器。
三。为Oracle数据库添加sqlcreator并添加以下SQL:
fme_sql_分隔符;更改表“wmain”禁用约束wmain_wassets;
sqlcreator在打开任何fme读取器之前执行,因此我们保证在开始编写任何特性之前删除约束。
四。将FeatureWriter添加到工作区画布。打开FeatureWriter参数对话框。选择oracle空间格式并选择数据集。
5个。使用oracle non-spatial格式导入oracle表、wmain和wassets。
6.按以下步骤7所示连接FeatureWriter。特征类型的顺序并不重要,因为我们禁用了约束。
7号。为Oracle数据库添加一个SqlExecutor并添加以下SQL:
fme_sql_分隔符;更改表“wmain”启用约束wmain_wassets;
8个。运行工作区并检查结果。
每个例子的优缺点是什么?也许每种方法更适合于不同的场景和表约束,例如1:m m:n等。
哪个表演最好?你能用性能换取简单吗?
哪个示例最适合更新工作流?亚搏在线
还有别的办法吗?
如果出现错误,哪种方法最容易恢复呢?
这个属性计算器可用于在加载前检查支持的条件。这允许用户有机会查看和更正任何可能导致写入失败的功能。
©2019安全亚搏在线软件公司|法律