使用 If-Else 语句从 ODI 调用 Oracle PL/SQL 存储过程

Calling Oracle PL/SQL sotred procedure from ODI with If-Else statment

问题:我应该调用并执行之前在数据库中定义的 PL/SQL 过程并且需要输入值。此外,必须有一个检查语句来控制输入(稍后将通过在运行时输入它来提供)不为零。 (这是一个商业条件,即使它可能不是逻辑上需要的。)

解决方案:

  1. 我创建了一个带有背景代码的 ODI 变量,使用这个变量作为被调用过程的输入值。我的意思是,如果变量名是 tst_var:
begin 
my_schema.procedure_name(#ODI_PROJECT.tst_var);
end;
  1. 我已经创建了一个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;

注意:

  1. 不需要 SYSDATE-1 上的 TO_DATE,因为这已经是约会了。
  2. 变量L_CURRENT_DATE可选,也可以直接使用my_schema.procedure_name(TO_CHAR(SYSDATE - 1,'YYYYMMDD'));