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

Откуда: Moscow
Сообщений: 290
Доброго времени суток, светлые умы.

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

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

В итоге выдает пустую строчку.
24 мар 11, 15:47    [10419736]     Ответить | Цитировать Сообщить модератору
 Re: Сложить два запроса  [new]
-2-
Member

Откуда:
Сообщений: 15330
Adtain,

null+123 = null
24 мар 11, 15:48    [10419749]     Ответить | Цитировать Сообщить модератору
 Re: Сложить два запроса  [new]
Adtain
Member

Откуда: Moscow
Сообщений: 290
-2-,

Это понятно, в примере, когда я передаю параметры в функцию нету значения null
24 мар 11, 15:51    [10419771]     Ответить | Цитировать Сообщить модератору
 Re: Сложить два запроса  [new]
-2-
Member

Откуда:
Сообщений: 15330
А я по твоему чего написал?!
null+123 -> null
null+2 -> null
return null+null
24 мар 11, 15:54    [10419794]     Ответить | Цитировать Сообщить модератору
 Re: Сложить два запроса  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6697
Adtain,

sum1 := sum1 + rs;
? = null + sum()
24 мар 11, 15:58    [10419822]     Ответить | Цитировать Сообщить модератору
 Re: Сложить два запроса  [new]
Adtain
Member

Откуда: Moscow
Сообщений: 290
Спасибо большое, неправильно сначала понял.
24 мар 11, 15:59    [10419828]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить