代码之家  ›  专栏  ›  技术社区  ›  Feres.o

Talend with SQL函数似乎不起作用

  •  0
  • Feres.o  · 技术社区  · 7 年前

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

    这里有一个例子。我有一个在SQL开发人员工具上运行良好的请求,但在我的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 回复  |  直到 7 年前
        1
  •  2
  •   Ibrahim Mezouar    7 年前

    虽然我不建议在每次执行作业时使用Talend创建/替换updateDate函数,但最好在sql开发人员中提前创建它,您可以尝试使用两个组件分离sql脚本:

    脚本的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
    
    推荐文章