use stored procedure parameter modify cursor select statement

时间:2015-05-06 20:17:35

标签: oracle stored-procedures plsql

我有一个基于其他几个创建表的存储过程。我有一个名为“filterDown”的存储过程参数,它将是一个ID。如果filterDown = 0,那么我想要包含所有ID。如果filterDown是其他任何东西,我只想选择那个ID。

这是我的代码中的游标声明:

    create or replace PROCEDURE country ( 
      fromDate IN DATE,
      toDate IN DATE,
      filterDown IN INT,
      chunkSize IN INT
      ) AS 

    --cursor
    cursor cc is
      select c.id, cd.population_total_count, cd.evaluation_date, cf.gdp_total_dollars
      from countries c
      join country_demographics cd on c.id = cd.country_id
      join country_financials cf on cd.country_id = cf.country_id and cf.evaluation_date = cd.evaluation_date
      where cd.evaluation_date > fromDate and cd.evaluation_date < toDate
      order by c.id,cd.evaluation_date;

--lots more code down here.....

换句话说,存储过程应该能够根据国家/地区ID使用此参数进行过滤,并使用默认值指示应包含所有国家/地区。当程序完成时,不符合标准的国家不应在派生表中。

我如何在光标中指定做类似的事情?

编辑: 以下是我如何调用该程序:

create or replace procedure testing as
  UPPER1 DATE;
  LOWER1 DATE;
  FILTERON1 NUMBER;
  CHUNKSIZE1 NUMBER;
BEGIN
  UPPER1 := TO_DATE('2000/01/01','yyyy/mm/dd');
  LOWER1 := TO_DATE('2005/01/01','yyyy/mm/dd');
  FILTERON1 := 143;
  CHUNKSIZE1 := 250;

  country(UPPER1,LOWER1,FILTERON1,CHUNKSIZE1);

END;

1 个答案:

答案 0 :(得分:2)

最简单的方法是在WHERE子句

中添加类似的内容
...
where cd.evaluation_date > fromDate 
  and cd.evaluation_date < toDate
  and (filterDown = 0 or c.id = filterDown)
...
相关问题