Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Цикл, меняющий параметр ф-ци на каждом его шаге.  [new]
sanchezz
Member

Откуда: Moscow
Сообщений: 45
Всем Добрый день!

Есть функция, кот. рассчитывает остатки по счету, по истории оборотов и остатков НА заданную дату.
FUNCTION GetBal(p_acnt_id NUMBER, p_date DATE DEFAULT SYSDATE,
                                  p_curr NUMBER DEFAULT 0, p_mode NUMBER DEFAULT 0,
                                  p_corr_mode NUMBER DEFAULT 0 ) RETURN NUMBER;
где, 
p_acnt_id NUMBER - ID счета
p_date DATE - дата
p_curr - (0- вернуть сумму в валюте, 1- вернуть сумму в RUR)
p_mode - (0- вернуть входящий на эту дату остаток, 1- вернуть исходящий)
p_corr_mode - (0- учесть корректировки по счету, 1- не учитывать)

Т.е. ф-я рассчитывает остатки по счету на определенную (конкретную) дату.

Необходимо:
Получить сумму входящего остатка по счетам на последний день месяца за год (2-е поле), с разбивкой по месяцам (1-е поле)
т.е результат должен быть таким:

DATE |SUMM
31.01.2007 |nnnnnn
28.02.2007 |nnnnnn
31.03.2007 |nnnnnn
30.04.2007 |nnnnnn
31.05.2007 |nnnnnn
...
итд за целый год

Решение:
Ввести переменную типа date, которая на каждом шаге цикла будет менять параметр функции (p_date) и записывать результат в таблицу.

Вот приблизительный рез-т..

declare 
    i_num number;
    c_num number;
    f_date date;
begin 
    f_date:=to_date ('31/01/2007', 'dd/mm/yyyy');
    select sum(bibs.ut.getbal(a.acnt_id, f_date, 1, 0, 0)) into c_num 
    from bibs.bs_account a
        where 
            a.source = 'ELBR' 
            and a.ext_acnt in (
            '45815810906800180226',
            '45815810406800180195') 
        --    and a.ext_acnt like '45815%'
            and a.date_clsd is null  
    i_num:=1;
    for i_num in 1..12 loop
    insert into bibs.PLS_STAT values (c_num)
            f_date:=add_months (p_date, 1)          
    end loop; 
end;

Естесственно не работает..
Возможно select нужно выполнять непосредственно в самом цикле, но как при этом его "загнать" в insert?

Прошу помочь, так как реализовать это нужно в кротчайший срок..
26 мар 08, 22:28    [5464472]     Ответить | Цитировать Сообщить модератору
 Re: Цикл, меняющий параметр ф-ци на каждом его шаге.  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17715
create table summary_tbl as
select f(dd.f_date,x,y), dd.f_date
from
(select add_month(start_date,rn)
from
(select rownum rn from all_objects where rownum < 200)
)

Other values x,y,z you can get from accounting transaction table.

JJ
26 мар 08, 23:30    [5464616]     Ответить | Цитировать Сообщить модератору
 Re: Цикл, меняющий параметр ф-ци на каждом его шаге.  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17715
create table summary_tbl as
select f(dd.f_date,x,y), dd.f_date
from
(select add_month(start_date,rn) f_date
from
(select rownum rn from all_objects where rownum < 200)
) dd

corrected.
26 мар 08, 23:32    [5464622]     Ответить | Цитировать Сообщить модератору
 Re: Цикл, меняющий параметр ф-ци на каждом его шаге.  [new]
==Tims==
Member [заблокирован]

Откуда: Гена Евтушенко
Сообщений: 343
select GetBal(<тут ID счета>, ADD_MONTHS(to_date('31/01/2007','DD/MM/YYYY'),level-1));
from dual connect by level <=12
27 мар 08, 07:42    [5464992]     Ответить | Цитировать Сообщить модератору
 Re: Цикл, меняющий параметр ф-ци на каждом его шаге.  [new]
sanchezz
Member

Откуда: Moscow
Сообщений: 45
А есть ли еще варианты?, интересует написание непосредственно через for..
28 мар 08, 12:19    [5472439]     Ответить | Цитировать Сообщить модератору
 Re: Цикл, меняющий параметр ф-ци на каждом его шаге.  [new]
==Tims==
Member [заблокирован]

Откуда: Гена Евтушенко
Сообщений: 343
sanchezz
А есть ли еще варианты?, интересует написание непосредственно через for..

for (select .....


читайте доку
28 мар 08, 14:15    [5473384]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить