Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在运行“复制数据”活动之前从目标表中删除数据_Sql_Oracle_Azure_Azure Data Factory - Fatal编程技术网

Sql 在运行“复制数据”活动之前从目标表中删除数据

Sql 在运行“复制数据”活动之前从目标表中删除数据,sql,oracle,azure,azure-data-factory,Sql,Oracle,Azure,Azure Data Factory,我正在尝试创建一个在一些Oracle数据库之间移动数据的管道。我已成功创建并测试了这些活动。我的问题是,我想在“复制”运行之前清空目标表,但我找不到这样做的方法(现在它将数据附加到表中) 起初我尝试使用该活动,但它只支持与SQL Server相关的源。data factory提供的任何其他活动都不适用于此用例。即使是一个通用的“执行SQL”活动也可以为我工作,但似乎没有类似的活动可用 编辑:我在下面贴了一个答案,但并不理想。如果您认为您有更好的解决方案,请发布答案 我找到了一个略显粗糙的解决方案

我正在尝试创建一个在一些Oracle数据库之间移动数据的管道。我已成功创建并测试了这些活动。我的问题是,我想在“复制”运行之前清空目标表,但我找不到这样做的方法(现在它将数据附加到表中)

起初我尝试使用该活动,但它只支持与SQL Server相关的源。data factory提供的任何其他活动都不适用于此用例。即使是一个通用的“执行SQL”活动也可以为我工作,但似乎没有类似的活动可用


编辑:我在下面贴了一个答案,但并不理想。如果您认为您有更好的解决方案,请发布答案

我找到了一个略显粗糙的解决方案。复制数据活动的接收器部分中有一个名为复制前脚本的配置。文档中说要使用它来处理传入数据,所以我认为它只能处理传入数据,但实际上是在目标数据库上执行的SQL(似乎在一个事务中,它已提交)

基本上,这是可行的:


我不是这个解决方案的超级粉丝,因为很难配置流。我希望有一个单独的活动,这样我可以准备成功/失败选项,而有了这个,整个“复制数据”活动将失败。如果您有更好的想法,请发布答案

作为管道的一部分,我一直使用存储过程来清除表数据。我这样做是因为我通常为数据(通常与表分区对齐)使用特定的where子句,而不是截断整个表

作为复制活动的替代方案,您可以使用数据流(ADFDF)活动。ADFDF接收器设置显示您可以截断表:

此屏幕截图是针对SQLDW接收器的,因此我不知道Oracle的ADFDF接收器是否允许此操作。

我在预复制脚本中使用“TRUNCATE TABLE xxx”。(截断比删除快)


另外,在您看来,没有“执行SQL任务”,但作为一种黑客行为,我们可以使用“查找”活动来执行临时脚本。链接到我以前的一个答案:

没有。我在问题中提到了这一点,Oracle数据库链接服务不支持“存储过程”活动。如果我的帖子不清楚,很抱歉-我的屏幕截图不是针对存储过程或复制活动,而是针对使用数据流活动。为清晰起见,进行了后期编辑。@SouravA的答案适用于我的用例。但我也会看看这个,谢谢你的努力。没问题-我会和他一样建议,但你说预脚本不理想,所以我想给你一个替代方案:-)我的“预复制脚本”问题是它不是一个单独的活动,我想单独检查它的成功/失败。例如,如果“预复制”失败,那么整个“复制数据”活动都会失败,我不希望这样。我认为使用“查找”也同样有问题,但至少我可以单独处理它的失败。谢谢,这很有希望。我明天会试试这个,如果它对我的用例有效的话,我会投票给你并给你奖金。这很有效,谢谢。我仍然希望有一个通用的“执行SQL”活动,但这取决于Microsoft。