在Oracle数据源SSIS中将变量传递给OLE DB源

时间:2018-11-11 14:14:43

标签: oracle ssis

我有以下查询,我只想加载last_update_date大于值之一的数据,我以正确的方式欺骗​​该值,并在SQL Server数据源中正常工作,但是当我使用Oracle时日期源不起作用。我也尝试用:VARIABLENAME更改引号,这给了我这个错误: 并非所有变量都受约束

SELECT 
PAPF.NATIONAL_IDENTIFIER NatnlIdNum,
PAY.PAYROLL_NAME PayrollName,
DEP.NAME DepartmentName,
PER_ASSIGNMENT_STATUS_TYPES_TL.USER_STATUS EmploymentStatDesc,
EMPLOYMENT_CATEGORY.MEANING EmploymentCatDesc,
PER_POSITION_DEFINITIONS.SEGMENT4 PositionName,
PAAF.EFFECTIVE_START_DATE EffectiveStartDate,
PAAF.EFFECTIVE_END_DATE EffectiveEndDate,
PG.NAME GradeName,
FROM PER_ALL_PEOPLE_F PAPF
INNER JOIN  PER_ALL_ASSIGNMENTS_F PAAF
ON PAPF.PERSON_ID=PAAF.PERSON_ID
LEFT JOIN PAY_ALL_PAYROLLS_F PAY
ON PAAF.PAYROLL_ID=PAY.PAYROLL_ID
AND TRUNC(SYSDATE) BETWEEN PAY.EFFECTIVE_START_DATE
AND PAY.EFFECTIVE_START_DATE
LEFT JOIN PAY_PEOPLE_GROUPS PPG
ON PAAF.PEOPLE_GROUP_ID=PPG.PEOPLE_GROUP_ID
LEFT JOIN HR_ALL_ORGANIZATION_UNITS DEP
ON PPG.SEGMENT2=DEP.ORGANIZATION_ID
LEFT JOIN fnd_lookup_values EMPLOYMENT_CATEGORY
ON  PAAF.EMPLOYMENT_CATEGORY=EMPLOYMENT_CATEGORY.lookup_code
AND EMPLOYMENT_CATEGORY.language='AR'
AND EMPLOYMENT_CATEGORY.lookup_type='EMP_CAT'
LEFT JOIN PER_ASSIGNMENT_STATUS_TYPES_TL
ON PAAF.ASSIGNMENT_STATUS_TYPE_ID=PER_ASSIGNMENT_STATUS_TYPES_TL.ASSIGNMENT_STATUS_TYPE_ID
AND PER_ASSIGNMENT_STATUS_TYPES_TL.language='AR'
LEFT JOIN HR_ALL_POSITIONS_F 
ON PAAF.POSITION_ID=HR_ALL_POSITIONS_F.POSITION_ID
AND TRUNC(SYSDATE) BETWEEN HR_ALL_POSITIONS_F.EFFECTIVE_START_DATE
AND HR_ALL_POSITIONS_F.EFFECTIVE_START_DATE
LEFT JOIN PER_POSITION_DEFINITIONS 
ON HR_ALL_POSITIONS_F.POSITION_DEFINITION_ID=PER_POSITION_DEFINITIONS.POSITION_DEFINITION_ID
LEFT JOIN PER_GRADES PG
ON PAAF.GRADE_ID=PG.GRADE_ID
LEFT JOIN HR_ALL_ORGANIZATION_UNITS SCHOOL
ON PPG.SEGMENT5=SCHOOL.ORGANIZATION_ID
LEFT JOIN HR_ALL_ORGANIZATION_UNITS ED
ON PPG.SEGMENT6=ED.ORGANIZATION_ID
WHERE TRUNC(SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE 
AND PAPF.EFFECTIVE_END_DATE
AND PAAF.LAST_UPDATE_DATE >?

无法从SQL命令中提取参数。提供程序可能不帮助从命令中解析参数信息。在这种情况下,请使用“来自变量的SQL命令”访问模式,在该模式下,整个SQL命令都存储在变量中。 ORA-00920:无效的关系运算符(OraOLEDB)

1 个答案:

答案 0 :(得分:0)

您可以在字符串变量中构建查询,然后在OLE DB源中使用“来自变量的SQL命令”选项,并在查询中添加参数。但是,在执行此操作时,确保传递给Oracle数据源的日期格式是预期的日期格式。要在存储SQL的字符串变量中串联date参数,必须将其设置为强制转换为字符串,格式仍将保留,但这不能保证它将作为日期数据类型传递,并且可能需要强制转换。另外,请注意,如果转换后的字符串的长度大于指定的长度,并且随后将其截断,则字符串转换函数(DT_STR, number of characters, code page)将返回错误。下面是字符串变量中SQL的示例表达式。

"SELECT 
PAPF.NATIONAL_IDENTIFIER NatnlIdNum,
PAY.PAYROLL_NAME PayrollName,
DEP.NAME DepartmentName,
PER_ASSIGNMENT_STATUS_TYPES_TL.USER_STATUS EmploymentStatDesc,
EMPLOYMENT_CATEGORY.MEANING EmploymentCatDesc,
PER_POSITION_DEFINITIONS.SEGMENT4 PositionName,
PAAF.EFFECTIVE_START_DATE EffectiveStartDate,
PAAF.EFFECTIVE_END_DATE EffectiveEndDate,
PG.NAME GradeName,
FROM PER_ALL_PEOPLE_F PAPF
INNER JOIN  PER_ALL_ASSIGNMENTS_F PAAF
ON PAPF.PERSON_ID=PAAF.PERSON_ID
LEFT JOIN PAY_ALL_PAYROLLS_F PAY
ON PAAF.PAYROLL_ID=PAY.PAYROLL_ID
AND TRUNC(SYSDATE) BETWEEN PAY.EFFECTIVE_START_DATE
AND PAY.EFFECTIVE_START_DATE
LEFT JOIN PAY_PEOPLE_GROUPS PPG
ON PAAF.PEOPLE_GROUP_ID=PPG.PEOPLE_GROUP_ID
LEFT JOIN HR_ALL_ORGANIZATION_UNITS DEP
ON PPG.SEGMENT2=DEP.ORGANIZATION_ID
LEFT JOIN fnd_lookup_values EMPLOYMENT_CATEGORY
ON  PAAF.EMPLOYMENT_CATEGORY=EMPLOYMENT_CATEGORY.lookup_code
AND EMPLOYMENT_CATEGORY.language='AR'
AND EMPLOYMENT_CATEGORY.lookup_type='EMP_CAT'
LEFT JOIN PER_ASSIGNMENT_STATUS_TYPES_TL
ON PAAF.ASSIGNMENT_STATUS_TYPE_ID=PER_ASSIGNMENT_STATUS_TYPES_TL.ASSIGNMENT_STATUS_TYPE_ID
AND PER_ASSIGNMENT_STATUS_TYPES_TL.language='AR'
LEFT JOIN HR_ALL_POSITIONS_F 
ON PAAF.POSITION_ID=HR_ALL_POSITIONS_F.POSITION_ID
AND TRUNC(SYSDATE) BETWEEN HR_ALL_POSITIONS_F.EFFECTIVE_START_DATE
AND HR_ALL_POSITIONS_F.EFFECTIVE_START_DATE
LEFT JOIN PER_POSITION_DEFINITIONS 
ON HR_ALL_POSITIONS_F.POSITION_DEFINITION_ID=PER_POSITION_DEFINITIONS.POSITION_DEFINITION_ID
LEFT JOIN PER_GRADES PG
ON PAAF.GRADE_ID=PG.GRADE_ID
LEFT JOIN HR_ALL_ORGANIZATION_UNITS SCHOOL
ON PPG.SEGMENT5=SCHOOL.ORGANIZATION_ID
LEFT JOIN HR_ALL_ORGANIZATION_UNITS ED
ON PPG.SEGMENT6=ED.ORGANIZATION_ID
WHERE TRUNC(SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE 
AND PAPF.EFFECTIVE_END_DATE
AND PAAF.LAST_UPDATE_DATE > " +  (DT_STR, 25, 1252)@[$Package:YourDateParameter]
相关问题