Как проще пробежаться в оракле по 12 месяцам и сформировать 12 запросов? Помогите...

Yura Zavaliy
Дата: 16.09.2004 14:53:10
Гуру, помогите начинающему в Оракле... нужно пробежаться по всем 12 месяцам 1997 года.... Как это проще сделать? Есть запрос:

select count(*) from cif_month where prd_cd='CAN' and bank = 4235 and cr_rt is null and
TO_CHAR(open_dt,'YYYY')='1997' and
as_of_dt = last_day(to_date('01/01/2003', 'DD/MM/YYYY'))

Может проще ввести переменную типа месяц, и увеличивать ее в цикле до 12?
Результаты запросов записать в 12 переменных а потом сформировать таблицу из этих переменных (чтоб можно было экспортировать).. Как на акцесе сделать знаю.. а на Оракле.. помогите плиз.... Нужно процедуру написать или функцию.... Хотя бы приблизительно набросайте......... Спасибо..
Vadim_Maximov
Дата: 16.09.2004 15:00:01
select count(*) from cif_month where prd_cd='CAN' and bank = 4235 and cr_rt is null and
TO_CHAR(open_dt,'YYYY')='1997' and
as_of_dt = last_day(to_date('01/01/2003', 'DD/MM/YYYY'))
union all
select count(*) from cif_month where prd_cd='CAN' and bank = 4235 and cr_rt is null and
TO_CHAR(open_dt,'YYYY')='1997' and
as_of_dt = last_day(to_date('01/02/2003', 'DD/MM/YYYY'))
union all
......
......
......
select count(*) from cif_month where prd_cd='CAN' and bank = 4235 and cr_rt is null and
TO_CHAR(open_dt,'YYYY')='1997' and
as_of_dt = last_day(to_date('01/12/2003', 'DD/MM/YYYY'))

Например так. :)
igor2222
Дата: 16.09.2004 15:03:13
А поиск?
Тынц
Yura Zavaliy
Дата: 16.09.2004 15:09:25
Vadim_Maximov
select count(*) from cif_month where prd_cd='CAN' and bank = 4235 and cr_rt is null and
TO_CHAR(open_dt,'YYYY')='1997' and
as_of_dt = last_day(to_date('01/01/2003', 'DD/MM/YYYY'))
union all
select count(*) from cif_month where prd_cd='CAN' and bank = 4235 and cr_rt is null and
TO_CHAR(open_dt,'YYYY')='1997' and
as_of_dt = last_day(to_date('01/02/2003', 'DD/MM/YYYY'))
union all
......
......
......
select count(*) from cif_month where prd_cd='CAN' and bank = 4235 and cr_rt is null and
TO_CHAR(open_dt,'YYYY')='1997' and
as_of_dt = last_day(to_date('01/12/2003', 'DD/MM/YYYY'))

Например так. :)

А мне ж нужно вывести во временную табличку или в переменные........
ditbunau
Дата: 16.09.2004 15:15:05
Yura Zavaliy
Vadim_Maximov

Например так. :)

А мне ж нужно вывести во временную табличку или в переменные........


Select into Vari, где Vari -некая переменная, уже объявленная.
Потом insert into ... values (var1, var2,...,var12)

Но это по тупому. По умному спроси гугу.
Elic
Дата: 16.09.2004 15:52:00
Yura Zavaliy
А мне ж нужно вывести во временную табличку или в переменные...
declare
  type TArr is table of int index by binary_integer;
  Arr TArr; -- "временная табличка" :)
begin
  for i in 1..12 loop
    Arr(i) := 0;
  end loop;
  for cCur in
  ( select to_number(to_char(open_dt, 'mm')) as mon, count(*) as cnt 
      from cif_month 
      where prd_cd = 'CAN'
        and bank = 4235 
        and cr_rt is null 
        and to_number(TO_CHAR(open_dt,'YYYY')) = 1997 
        and as_of_dt = last_day(to_date('01/01/2003', 'DD/MM/YYYY'))
      group by to_number(to_char(open_dt, 'mm'))
  ) loop
    Arr(cCur.mon) := cCur.cnt;
  end loop;
end;
Yura Zavaliy
Дата: 16.09.2004 16:25:47
Наваял, подскажите где ошибка? все время значение count-а равно 0.. если не делать add_months а писать вручную то все пашет... :(

PROCEDURE QQQ
IS
A DATE;
MONTHH numeric;
V_DATE numeric;
BEGIN
/*FOR MONTHH:=1 TO 12*/
A:='01/12/2002';
FOR i IN 1..3 LOOP
A:=add_months(to_date(A, 'DD/MM/YYYY'),1);
dbms_output.put_line('A='||A);
select count(*) into v_date from cif_month where prd_cd='CAN' and bank = 4235 and cr_rt is null and
TO_CHAR(open_dt,'YYYY')='1997' and
as_of_dt = last_day(A);
dbms_output.put_line(last_day(A));
dbms_output.put_line(V_DATE);
END LOOP;
END;
Yura Zavaliy
Дата: 16.09.2004 16:27:11
Elic
Yura Zavaliy
А мне ж нужно вывести во временную табличку или в переменные...
declare
  type TArr is table of int index by binary_integer;
  Arr TArr; -- "временная табличка" :)
begin
  for i in 1..12 loop
    Arr(i) := 0;
  end loop;
  for cCur in
  ( select to_number(to_char(open_dt, 'mm')) as mon, count(*) as cnt 
      from cif_month 
      where prd_cd = 'CAN'
        and bank = 4235 
        and cr_rt is null 
        and to_number(TO_CHAR(open_dt,'YYYY')) = 1997 
        and as_of_dt = last_day(to_date('01/01/2003', 'DD/MM/YYYY'))
      group by to_number(to_char(open_dt, 'mm'))
  ) loop
    Arr(cCur.mon) := cCur.cnt;
  end loop;
end;


Спасибо :) только мне еще нужно захватить несколько месяцев следующего года.. пробовал через add_months все время 0 получается почему-то....
Yura Zavaliy
Дата: 16.09.2004 16:34:44
Elic
Yura Zavaliy
А мне ж нужно вывести во временную табличку или в переменные...
declare
  type TArr is table of int index by binary_integer;
  Arr TArr; -- "временная табличка" :)
end;


А как быть если мне нужна настроящая табличка - из нее потом будет експорт... CREATE TABLE ругается внутри процедуры....
Alex2000
Дата: 16.09.2004 16:41:44
decode(to_char(data,'mm.yyyy'),'01.'||parYear,sum(c.amount)) as m1,
decode(to_char(data,'mm.yyyy'),'02.'||parYear,sum(c.amount)) as m2,
decode(to_char(data,'mm.yyyy'),'03.'||parYear,sum(c.amount)) as m3,
decode(to_char(data,'mm.yyyy'),'04.'||parYear,sum(c.amount)) as m4,
decode(to_char(data,'mm.yyyy'),'05.'||parYear,sum(c.amount)) as m5,
decode(to_char(data,'mm.yyyy'),'06.'||parYear,sum(c.amount)) as m6,
decode(to_char(data,'mm.yyyy'),'07.'||parYear,sum(c.amount)) as m7,
decode(to_char(data,'mm.yyyy'),'08.'||parYear,sum(c.amount)) as m8,
decode(to_char(data,'mm.yyyy'),'09.'||parYear,sum(c.amount)) as m9,
decode(to_char(data,'mm.yyyy'),'10.'||parYear,sum(c.amount)) as m10,
decode(to_char(data,'mm.yyyy'),'11.'||parYear,sum(c.amount)) as m11,
decode(to_char(data,'mm.yyyy'),'12.'||parYear,sum(c.amount)) as m12