【问题标题】:passing variable to OLE DB Source in oracle data source SSIS在oracle数据源SSIS中将变量传递给OLE DB源
【发布时间】:2018-11-14 02:01:19
【问题描述】:

我有以下查询,我只想加载 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)

【问题讨论】:

    标签: oracle ssis


    【解决方案1】:

    您可以在字符串变量中构建查询,然后使用 OLE DB 源中的“来自变量的 SQL 命令”选项并在查询中添加参数。但是,在执行此操作时,确保传递到 Oracle 数据源的日期格式是预期的日期格式。要在保存 SQL 的字符串变量中连接日期参数,它需要是转换为字符串,格式仍将保留,但这并不能保证它将作为日期数据类型传递,并且可能需要进行转换。另请注意,如果转换的字符串长度超过指定长度并且随后被截断,则字符串转换函数(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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      相关资源
      最近更新 更多