Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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
从Oracle提取数据的SSI_Oracle_Ssis - Fatal编程技术网

从Oracle提取数据的SSI

从Oracle提取数据的SSI,oracle,ssis,Oracle,Ssis,我有一个SSIS包,它正在使用本机OLD DB\oracle provider for OLD DB从oracle数据库中提取数据。 我的包成功但缓慢地将数据从Oracle中的一个视图拉到SQL数据库中的一个临时表中。我遇到的问题是,Oracle中的某些字段的长度为4000个字符,而SQL Server中我只需要前255个字符。在我的oracle查询中使用一个子字符串,只使用我需要的大小,还是全部使用4000个字符更好?是否有更好的方法来处理此数据导入 以下是我用于从Oracle提取数据的查询示

我有一个SSIS包,它正在使用本机OLD DB\oracle provider for OLD DB从oracle数据库中提取数据。 我的包成功但缓慢地将数据从Oracle中的一个视图拉到SQL数据库中的一个临时表中。我遇到的问题是,Oracle中的某些字段的长度为4000个字符,而SQL Server中我只需要前255个字符。在我的oracle查询中使用一个子字符串,只使用我需要的大小,还是全部使用4000个字符更好?是否有更好的方法来处理此数据导入

以下是我用于从Oracle提取数据的查询示例:

select a
, b
, c
, substring (c,1,255) as c, substring (d,1,255) as d
, e
,   CASE WHEN EXTRACT(YEAR from LAST_TAKEN_DT) < 1900
        THEN NULL 
        WHEN EXTRACT(YEAR from LAST_TAKEN_DT) > 2025
        THEN NULL
    END AS LAST_TAKEN_DT
选择一个
B
C
,子串(c,1255)为c,子串(d,1255)为d
E
,提取时的情况(从上次提取日期算起的年份)<1900
然后无效
提取时间(自上次提取的年份)>2025年
然后无效
作为最后一次拍摄结束

从oracle_视图1开始,如果由您决定,我建议通过OLEDB连接使用Attunity oracle适配器。这肯定要快得多,您可以选择在Oracle查询中或在SSIS包中使用派生列执行子字符串。

case语句是因为Oracle中的最后一个字段是测试字段,进入SQL Server时是日期时间字段。是的,通常最好尽早减少数据集。这包括宽度和行数。Attunity为+1。我总是根据输出要求对每一列进行细分或转换-这也使您免受可能破坏SSI的看似微不足道的数据类型更改的影响,例如Oracle列从VARCHAR2(30)增加到VARCHAR2(60)。