span8
span4
有很多方法可以“让您的数据库完成工作”,我们来看看如何使用FME更有效地执行对Oracle的写操作。
当使用FME写入数据库时,如果违反表上的约束,就可能发生错误。约束是限制数据库中某个列的可能值的规则。典型的约束包括非空、惟一和键(主键和外键)。下面概述的练习将介绍一种方法,用于处理由外键连接的表的写入导致的加载失败。
虽然这个练习使用了神谕数据库,讨论的概念和方法可以应用到其他数据库如PostgreSQL的/PostGIS的,SQL服务器。
这个练习的目的是显示向具有约束(例如外键约束)的数据库表写入的选项。在本例中,您将加载一个水管网络(WMAINS),并创建一个具有管道制造商属性的资产表(WASSETS)。这两个表通过外键约束(称为WMAIN_WASSETS)相关联。
运行工作区
1.打开工作空间:DatabaseWrite-Start.fmw。运行它。
工作空间正在向Oracle中两个连接的表写入数据。父表(WASSETS)的主键是MANUFACTURERID,子表(WMAIN)的主键是MAINID,外键是MANUFACTURERID。
工作空间失败抛出以下错误:
执行语句' INSERT INTO "WMAIN" ("MAINID", "ENABLED",…) VALUES (:"MAINID",:"ENABLED",…)'未成功;错误是' ORA-02291:违反了完整性约束(WMAIN_WASSETS) -未找到父键'。(serverType = '在' serverName = '”,用户名=` ',密码=`***',数据库名=`')
发生错误是因为违反了WMAIN表上的外键约束(称为WMAIN_WASSETS)。为了满足约束,您必须在写入具有外键的子表之前写入父表。
下面的示例演示了处理此问题并写入相关表的不同方法。
实施例1 - 使用FeatureHolder
FeatureHolder用于保存指向子表(WMAIN)的特性。由于只有很少的特性被写入到父表(WASSETS),所以它能够在FeatureHolder发布特性之前完成写入。这有效地阶段工作流程。亚搏在线
1.在运行此示例之前,需要清理数据库表。删除并重新使用SQLCreator变压器的表。打开变压器特性,选择SQL语句并选择运行...然后取消退出变压器特性。
2。添加FeatureHolder前WMAIN表。
3。运行工作空间,检查日志文件和结果。
该FeatureHolder是与功能更小的数字工作空间非常有用。如果有被写入表中的大量记录,并在FeatureHolder举行,这将影响到整体性能。
实施例2 - 使用连接运行时订单
您可以控制的退出变压器功能使用连接运行顺序选项的顺序。这种使用连接运行时为了例如确保母记录首先插入。
1.在运行此示例之前,需要清理数据库表。删除并重新使用SQLCreator变压器的表。打开变压器特性,选择SQL语句并选择运行...然后取消退出变压器特性。
2。删除从以前的步骤FeatureHolder变压器。
3。设置在输出连接器,退出AttributeManager的一个连接运行顺序通过右键点击。确保WASSET连接是第一个。这将确保WASSET记录其对应的WMAIN记录之前插入,确保WMAIN满足约束条件。
4。设置的每次交易的特点1。你必须使用的1转换间隔,以保证插入WMAIN记录之前的WASSETS记录已提交。
5。运行转换。
正如你所看到的,设置为1的交易间隔对性能的承诺是为写入每个功能进行了很大的影响。它确保记录写入到子表之前写入父表。
实施例3 - 使用FeatureWriter
该FeatureWriter变压器是写入数据的另一种方式。移动写入操作到工作区的工作流使您的订购更多的灵活性,功能类型编写以及如何预处理和后处理的数据亚搏在线。
在这个例子中,你将使用它来禁用SQL调用,然后启用WMAIN_WASSETS外键约束。在你们之间会加载数据。
1.下降并如上所以开始时使用干净的石板实施例2中描述的创建使用SQLCreator的表。
2。禁用或删除甲骨文作家。
3。添加SQLCreator Oracle数据库并添加下面的SQL:
FME_SQL_DELIMITER;ALTER TABLE “WMAIN” 禁用约束WMAIN_WASSETS;
任何FME阅读器被打开之前,运行SQLCreator,所以我们要保证之前的任何功能开始被写入约束被丢弃。
4。一个FeatureWriter添加到工作空间画布。打开FeatureWriter参数对话框。选择Oracle Spatial格式,并选择您的数据集。
5。导入使用Oracle非空间作为格式的Oracle表,WMAIN和WASSETS。
6。连接FeatureWriter如在步骤7中所示的下方。因为我们禁用约束的特征类型的顺序并不重要。
7。添加SQLExecutor为您的Oracle数据库,并添加以下SQL:
FME_SQL_DELIMITER;ALTER TABLE “WMAIN” 启用约束WMAIN_WASSETS;
8。运行工作区和检查结果。
什么是每个示例的利弊?也许每种方法更适合于不同的场景和如1表约束:M M:N等
提供了最好的性能?你可以交易的简单表现?
这例子可能最适合的更新工作流程?亚搏在线
是否还有其他的办法?
如果有错误,该方法具有最简单的恢复?
该AttributeValidator可用于检查所支持的条件装载之前。这允许用户查看和纠正可能会导致写失败的任何功能的机会。
©2019安全亚搏在线软件公司法律