使用 If-Else 语句从 ODI 调用 Oracle PL/SQL 存储过程
Calling Oracle PL/SQL sotred procedure from ODI with If-Else statment
问题:我应该调用并执行之前在数据库中定义的 PL/SQL 过程并且需要输入值。此外,必须有一个检查语句来控制输入(稍后将通过在运行时输入它来提供)不为零。 (这是一个商业条件,即使它可能不是逻辑上需要的。)
解决方案:
- 我创建了一个带有背景代码的 ODI 变量,使用这个变量作为被调用过程的输入值。我的意思是,如果变量名是 tst_var:
begin
my_schema.procedure_name(#ODI_PROJECT.tst_var);
end;
- 我已经创建了一个ODI 包,并将这些ODI 变量和过程依次放入其中。我还为我的变量选择了设置变量的类型。输出如下:
我解释的这个流效果很好。但很明显,没有检查语句。谁能帮我解决如何添加 IF-ELSE 语句来控制变量 tst_var 的值的问题?
实际上,如果我想把我的想法写在纸上,那就是:
current_Date= TO_CHAR(TO_DATE(SYSDATE - 1),'YYYYMMDD');
if #ODI_PROJECT.tst_var<> 0 then my_schema.procedure_name(#ODI_PROJECT.tst_var);
else my_schema.procedure_name(current_Date);
现在,我不知道在 ODI 中实现上述逻辑的等价物。
该逻辑可以直接在 ODI 过程中的 PL/SQL 块中实现:
DECLARE
L_CURRENT_DATE VARCHAR2(8);
BEGIN
L_CURRENT_DATE := TO_CHAR(SYSDATE - 1,'YYYYMMDD');
IF #ODI_PROJECT.tst_var <> 0 THEN
my_schema.procedure_name(#ODI_PROJECT.tst_var);
ELSE
my_schema.procedure_name(L_CURRENT_DATE);
END IF;
END;
注意:
- 不需要
SYSDATE-1
上的 TO_DATE
,因为这已经是约会了。
- 变量L_CURRENT_DATE可选,也可以直接使用
my_schema.procedure_name(TO_CHAR(SYSDATE - 1,'YYYYMMDD'));
问题:我应该调用并执行之前在数据库中定义的 PL/SQL 过程并且需要输入值。此外,必须有一个检查语句来控制输入(稍后将通过在运行时输入它来提供)不为零。 (这是一个商业条件,即使它可能不是逻辑上需要的。)
解决方案:
- 我创建了一个带有背景代码的 ODI 变量,使用这个变量作为被调用过程的输入值。我的意思是,如果变量名是 tst_var:
begin
my_schema.procedure_name(#ODI_PROJECT.tst_var);
end;
- 我已经创建了一个ODI 包,并将这些ODI 变量和过程依次放入其中。我还为我的变量选择了设置变量的类型。输出如下:
我解释的这个流效果很好。但很明显,没有检查语句。谁能帮我解决如何添加 IF-ELSE 语句来控制变量 tst_var 的值的问题?
实际上,如果我想把我的想法写在纸上,那就是:
current_Date= TO_CHAR(TO_DATE(SYSDATE - 1),'YYYYMMDD');
if #ODI_PROJECT.tst_var<> 0 then my_schema.procedure_name(#ODI_PROJECT.tst_var);
else my_schema.procedure_name(current_Date);
现在,我不知道在 ODI 中实现上述逻辑的等价物。
该逻辑可以直接在 ODI 过程中的 PL/SQL 块中实现:
DECLARE
L_CURRENT_DATE VARCHAR2(8);
BEGIN
L_CURRENT_DATE := TO_CHAR(SYSDATE - 1,'YYYYMMDD');
IF #ODI_PROJECT.tst_var <> 0 THEN
my_schema.procedure_name(#ODI_PROJECT.tst_var);
ELSE
my_schema.procedure_name(L_CURRENT_DATE);
END IF;
END;
注意:
- 不需要
SYSDATE-1
上的TO_DATE
,因为这已经是约会了。 - 变量L_CURRENT_DATE可选,也可以直接使用
my_schema.procedure_name(TO_CHAR(SYSDATE - 1,'YYYYMMDD'));