Informatica PowerCenter工作流表达式编辑器传参与日期校验方法咨询
解决方法
1. 在Oracle查询中直接加入验证逻辑
既然日期是由Oracle生成的,直接在生成日期的SQL中加入验证,同时输出验证标记:
SELECT TO_CHAR(RUN_DATE,'DD.MM.YYYY') AS RUN_DATE_V, TO_CHAR(TRUNC(RUN_DATE,'MM')-1,'DD.MM.YYYY') AS LAST_DAY_PREV_MONTH_V, TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(RUN_DATE,'MM'),-2)),'DD.MM.YYYY') LAST_DAY_2_PREV_MONTH_V, -- 对比生成的上月月末与预期值,输出验证标记 CASE WHEN TO_CHAR(TRUNC(RUN_DATE,'MM')-1,'DD.MM.YYYY') = TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'),-1)),'DD.MM.YYYY') THEN 'VALID' ELSE 'INVALID' END AS DATE_VALID_FLAG FROM (SELECT TRUNC(SYSDATE) AS RUN_DATE FROM DUAL ) P
在映射中,使用DATE_VALID_FLAG:如果值为INVALID,可以通过过滤器拒绝记录,或用表达式抛出错误,让会话直接失败,从而不触发后续的启动标志。
2. 利用工作流变量实现验证
PowerCenter工作流变量支持运行时赋值和判断,步骤如下:
- 在工作流中创建日期类型的工作流变量,例如
$$WF_LAST_DAY_PREV_MONTH。 - 在生成参数文件的会话结束后,添加命令任务或存储过程任务,读取参数文件中的
$$LAST_DAY_PREV_MONTH值,转换为日期类型后赋值给该工作流变量。 - 添加决策任务,判断
$$WF_LAST_DAY_PREV_MONTH是否等于TRUNC(SYSDATE,'MM')-1:- 若相等,继续触发后续依赖会话;
- 若不相等,跳过后续任务或标记工作流失败。
3. 验证通过后再生成参数文件
修改参数字符串生成逻辑,仅当日期验证通过时才输出正常的参数内容,否则输出错误标记:
SELECT CASE WHEN TO_CHAR(TRUNC(RUN_DATE,'MM')-1,'DD.MM.YYYY') = TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'),-1)),'DD.MM.YYYY') THEN '[Global]'||chr(10)|| '$$FolderName='||$PMFolderName||chr(10)|| '$$RUN_DATE='||RUN_DATE_V||chr(10)|| '$$LAST_DAY_PREV_MONTH='||LAST_DAY_PREV_MONTH_V||chr(10)|| '$$LAST_DAY_2_PREV_MONTH='||LAST_DAY_2_PREV_MONTH_V||chr(10)|| 'FILE_CREATE_TIME='|| SYSDATE ELSE 'INVALID_DATE' -- 验证不通过时输出错误标识 END AS PARAM_FILE_CONTENT FROM ( SELECT TRUNC(SYSDATE) AS RUN_DATE, TO_CHAR(TRUNC(SYSDATE),'DD.MM.YYYY') AS RUN_DATE_V, TO_CHAR(TRUNC(SYSDATE,'MM')-1,'DD.MM.YYYY') AS LAST_DAY_PREV_MONTH_V, TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'),-2)),'DD.MM.YYYY') LAST_DAY_2_PREV_MONTH_V FROM DUAL ) P
在映射中检查输出的PARAM_FILE_CONTENT是否包含INVALID_DATE,若是则让会话失败,避免触发后续任务。
内容的提问来源于stack exchange,提问作者serkan
相关产品推荐
相关产品推荐

