【问题标题】:Talend with SQL function seems not to work带有 SQL 功能的 Talend 似乎不起作用
【发布时间】:2018-02-12 14:09:52
【问题描述】:

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

这是一个例子。我有一个在 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é

【问题讨论】:

    标签: etl talend talend-mdm


    【解决方案1】:

    虽然我不建议在每次执行作业时使用 Talend 创建/替换 updateDate 函数,因为最好事先在您的 sql 开发人员中创建它,您可以尝试使用 2 个组件分隔您的 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
    

    【讨论】:

    • 您有一个编译错误,因为您缺少脚本周围的引号:“create or replace function ..etc ..”
    • 谢谢你是对的,但现在有另一个错误,
    • 是的,我现在选择一个连接,但是,函数的名称现在没有在 toracle 输入上重新识别
    • 该函数在 tOracle Row 上声明,但在 oracle 输入中无法识别
    • 你能帮帮我吗,我坚持下去了,我按照你说的做了,在 toracle Row 上的函数声明和在 tOracle 输入上使用该函数的 sql 语句,我附上了新的屏幕截图
    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多