具有 SQL 功能的 Talend 似乎不起作用
Talend with SQL function seems not to work
我正在使用 Oracle SQL Developer 测试我的数据库请求,然后才将此请求注入我的 Talend 项目。
这是一个例子。我有一个在 SQL 开发人员工具上运行良好但在我的 Talend 项目上运行不正常的请求。
我的 sql 语句有一个函数声明,然后是一个像这样的 select:
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é
尽管我不建议在每次执行作业时使用 Talend 来 create/replace 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
我正在使用 Oracle SQL Developer 测试我的数据库请求,然后才将此请求注入我的 Talend 项目。
这是一个例子。我有一个在 SQL 开发人员工具上运行良好但在我的 Talend 项目上运行不正常的请求。
我的 sql 语句有一个函数声明,然后是一个像这样的 select:
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é
尽管我不建议在每次执行作业时使用 Talend 来 create/replace 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