如何在有条件的情况下执行2个存储过程

时间:2018-09-05 11:51:09

标签: oracle plsql

我想在SP1内运行SP2。 SP2将多个数据插入表中,其中一个是实际日期。

因此,我希望仅在列日期中该日期在最近10天内执行SP2。

有可能吗?

谢谢

1 个答案:

答案 0 :(得分:0)

这是一个例子。

首先,创建一个表并插入一些示例行:

SQL> create table my_tbl
  2    (id      number,
  3     my_col  date
  4    );

Table created.

SQL> insert into my_tbl (id, my_col)
  2    -- more than 10 days ago
  3    select 1, date '2018-05-25' from dual union all
  4    -- less than 10 days ago
  5    select 2, date '2018-09-01' from dual;

2 rows created.

创建两个过程;如果满足条件,则SP_1应该调用SP_2。我正在遍历表中的两行;一行的日期值可以,另一行的日期值不能。

SQL> create or replace procedure sp_2 as
  2  begin
  3    dbms_output.put_line('...I am in SP_2 now');
  4  end;
  5  /

Procedure created.

SQL> create or replace procedure sp_1 as
  2  begin
  3    for cur_r in (select my_col from my_tbl order by id) loop
  4      dbms_output.put_line('date value = ' || to_char(cur_r.my_col, 'yyyy-mm-dd'));
  5      if cur_r.my_col >= trunc(sysdate) - 10 then
  6         dbms_output.put_line('...calling SP_2');
  7         sp_2;
  8      else
  9         dbms_output.put_line('...date condition failed - not calling SP_2');
 10      end if;
 11    end loop;
 12  end;
 13  /

Procedure created.

测试:

SQL> set serveroutput on
SQL> begin
  2    sp_1;
  3  end;
  4  /
date value = 2018-05-25
...date condition failed - not calling SP_2
date value = 2018-09-01
...calling SP_2
...I am in SP_2 now

PL/SQL procedure successfully completed.