Сложить два запроса

Adtain
Дата: 24.03.2011 15:46:19
Доброго времени суток, светлые умы.

Необходимо сложить два сложных запроса (с подвложенными в них подзапросами):

select ...
from ...
where ...

и

select ...
from ...
where ...

Выдают они одно и тоже значие и по типу и по количеству - считают сумму, т.е. можно было бы написать "union all" и сложить:

select sum (первый select union all второй select) from dual

но тогда мои два запроса оказываются подзапросами и в них не передаются параметры одного "глобального" select'а

Решил написать функцию (по примеру, здесь нашел) но почему-то она не работает с числами, а только с типом VARCHAR2

Текст:

CREATE OR REPLACE FUNCTION fr_sin_summass(mass1   SYS_REFCURSOR,
                                          mass2   SYS_REFCURSOR)
  RETURN NUMBER IS

  rs   NUMBER(17, 2);
  sum1 NUMBER(17, 2);  
  sum2 NUMBER(17, 2);

BEGIN

  LOOP
    FETCH mass1 INTO rs;
    EXIT WHEN mass1%NOTFOUND;
    sum1 := sum1 + rs;
  END LOOP;
  CLOSE mass1;
  
  LOOP
    FETCH mass2 INTO rs;
    EXIT WHEN mass2%NOTFOUND;
    sum2 := sum2 + rs;
  END LOOP;
  CLOSE mass2;  

  RETURN sum1 + sum2;
END fr_sin_summass;

Запускаю для проверки так:

select fr_sin_summass((cursor(select 123 from dual)), (cursor(select 2 from dual))) from dual

В итоге выдает пустую строчку.
PooH_2
Дата: 24.03.2011 16:48:30
а если так:
  sum1 NUMBER(17, 2):=0;
  sum2 NUMBER(17, 2):=0;
PooH_2
Дата: 24.03.2011 16:51:23
вспомнилась избитая-избитая шутка:
Буратино дали три яблока. Два он съел. Сколько яблок осталось у Буратино? Думаете одно? Ничего подобного. Никто не знает сколько у него уже было яблок до этого. Мораль - всегда обнуляйте переменные!