带有SQL函数的Talend似乎无法正常工作

时间:2018-02-12 14:09:52

标签: etl talend talend-mdm

我正在使用Oracle SQL Developer在我的Talend项目上注入此请求之前测试我的数据库请求。

这是一个例子。我有一个在SQL Developer工具上正常工作的请求,但在我的Talend项目上却没有。

我的sql语句有一个函数声明,然后像这样选择:

create or replace function updateDate(p_date varchar2) return date as
  l_date date;
  e_bad_day exception;
  pragma exception_init (e_bad_day, -1847);
begin
  begin
    -- try to convert
    l_date := to_date(p_date,'yyyymmdd');
  exception
    when e_bad_day then
      -- ignore the supplied day value and get last day of month
      l_date := last_day(to_date(substr(p_date, 1, 6), 'yyyymm'));
  end;
  return l_date;
end;
/
Select ASRF_NUMASR NIR,
ASSUR_NOASSURE NOASSURE,
ASRF_CODSEX sexe,
updateDate(ASSUR_DATNAIS) as DATE_REAL
from NORMAL_ASSUR 
UNION
Select ASRF_NUMASR NIR,
ASSUR_NOASSURE NOASSURE,

当我在Talend项目中放入相同的文字时,它无效。它似乎只执行我的函数声明。

例外是:

ORA-01003 aucune instruction analysé

1 个答案:

答案 0 :(得分:2)

虽然我不建议在每次执行作业时使用Talend创建/替换updateDate函数,因为事先在sql开发人员中创建它更好,你可以试着分离你的sql脚本使用2个组件:

脚本的DDL部分位于tOracleRow

"create or replace function updateDate(p_date varchar2) return date as
  l_date date;
  e_bad_day exception;
  pragma exception_init (e_bad_day, -1847);
begin
  begin
    -- try to convert
    l_date := to_date(p_date,'yyyymmdd');
  exception
    when e_bad_day then
      -- ignore the supplied day value and get last day of month
      l_date := last_day(to_date(substr(p_date, 1, 6), 'yyyymm'));
  end;
  return l_date;
end;"

DML部分进入tOracleInput(并在组件上设置相应的模式)

"Select ASRF_NUMASR NIR,
ASSUR_NOASSURE NOASSURE,
ASRF_CODSEX sexe,
updateDate(ASSUR_DATNAIS) as DATE_REAL
from NORMAL_ASSUR 
UNION
Select ASRF_NUMASR NIR,
ASSUR_NOASSURE NOASSURE,
..."

并像这样打电话给他们:

tOracleRow
   |
OnSubjobOk
   |
tOracleInput -- Main -- target