[Ora] Никак не пойму в чем беда
От: Funny Rabbit Россия  
Дата: 31.10.19 05:26
Оценка:
Делаю так

select extract(month from v.ddate_from),
             extract(year from v.ddate_from),
             extract(month from v.ddate_to),
             extract(year from v.ddate_to)
        into dmonth1, dyear1, dmonth2, dyear2
        from T1 v
       where v.NPRN = r.nrn;



И далее

select sum(vpd.nsumm)
          into dbo
          from T2 vpd
         where vpd.nprn = user_num
           and vpd.nyear between dyear1 and dyear2
           and vpd.nmonth between dmonth1 and dmonth2;


Но ничего не выводит. Почему?
То что меня не убивает, делает меня умнее.
Re: [Ora] Никак не пойму в чем беда
От: Funny Rabbit Россия  
Дата: 31.10.19 05:40
Оценка:
Здравствуйте, Funny Rabbit, Вы писали:

T2
------------
230311 2015 7 -612,52
230311 2015 6
-323,00
230311 2015 5
-154,11
230311 2015 4
-35,93
230311 2015 3
-55,93
230311 2015 2
-505,93
230311 2015 1
-455,93
230311 2014 12 -553,76
230311 2014 11 -342,65
230311 2014 10 -292,65
230311 2014 9
61,90
230311 2014 8
0,00

T1

01.08.2014 31.07.2015
То что меня не убивает, делает меня умнее.
Re: [Ora] Никак не пойму в чем беда
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.10.19 08:22
Оценка: 4 (1)
Здравствуйте, Funny Rabbit, Вы писали:

FR>Делаю так


FR>
FR>select extract(month from v.ddate_from),
FR>             extract(year from v.ddate_from),
FR>             extract(month from v.ddate_to),
FR>             extract(year from v.ddate_to)
FR>        into dmonth1, dyear1, dmonth2, dyear2
FR>        from T1 v
FR>       where v.NPRN = r.nrn;
FR>

1. Что такое r?
2. Куда и что оно должно выводить? Вы же в переменные всё сложили.

FR>
FR>select sum(vpd.nsumm)
FR>          into dbo
FR>          from T2 vpd
FR>         where vpd.nprn = user_num
FR>           and vpd.nyear between dyear1 and dyear2
FR>           and vpd.nmonth between dmonth1 and dmonth2;
FR>


FR>Но ничего не выводит. Почему?

3. Опять — что и куда оно должно выводить?

Для начала, посмотрите, что подхватывается селектом:
select extract(month from v.ddate_from),
             extract(year from v.ddate_from),
             extract(month from v.ddate_to),
             extract(year from v.ddate_to)
--        into dmonth1, dyear1, dmonth2, dyear2
        from T1 v
       where v.NPRN = r.nrn;

Убедившись, что select делает то, что нужно, проверьте, что присваивание работает:
select extract(month from v.ddate_from),
             extract(year from v.ddate_from),
             extract(month from v.ddate_to),
             extract(year from v.ddate_to)
        into dmonth1, dyear1, dmonth2, dyear2
        from T1 v
       where v.NPRN = r.nrn;
 dbms_output.put_line('dmonth1: ' || dmonth1 || ' dyear1:' || dyear1 || ' dmonth2:' || dmonth2 || ' dyear2: ' || dyear2);

Потом точно так же второй стейтмент — для начала посмотрите, что найдёт select.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: [Ora] Никак не пойму в чем беда
От: Funny Rabbit Россия  
Дата: 31.10.19 11:24
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Funny Rabbit, Вы писали:


FR>>Делаю так


FR>>
FR>>select extract(month from v.ddate_from),
FR>>             extract(year from v.ddate_from),
FR>>             extract(month from v.ddate_to),
FR>>             extract(year from v.ddate_to)
FR>>        into dmonth1, dyear1, dmonth2, dyear2
FR>>        from T1 v
FR>>       where v.NPRN = r.nrn;
FR>>

S>1. Что такое r?
S>2. Куда и что оно должно выводить? Вы же в переменные всё сложили.

r — Это курсор. Для упрощения пусть будет user_num (230311)

FR>>
FR>>select sum(vpd.nsumm)
FR>>          into dbo
FR>>          from T2 vpd
FR>>         where vpd.nprn = user_num
FR>>           and vpd.nyear between dyear1 and dyear2
FR>>           and vpd.nmonth between dmonth1 and dmonth2;
FR>>


FR>>Но ничего не выводит. Почему?

S>3. Опять — что и куда оно должно выводить?

S>Для начала, посмотрите, что подхватывается селектом:

Все правильно выводит первый запрос. Дело в другом.
select * from dual where 3 between 4 and 2

Ничего не выводит

а
select * from dual where 3 between 2 and 4

выводит. В этом проблема
То что меня не убивает, делает меня умнее.
Re: [Ora] Никак не пойму в чем беда
От: Ромашка Украина  
Дата: 31.10.19 17:28
Оценка: 4 (1)
Здравствуйте, Funny Rabbit, Вы писали:
FR>Но ничего не выводит. Почему?

Потому что нельзя так с датами работать.

PS Ну, в совсем уж крайнем случае хотя-бы так:


select sum(vpd.nsumm)
          into dbo
          from T2 vpd
         where vpd.nprn = user_num
           and (vpd.nyear * 12 + vpd.nmonth) between (dyear1 * 12 + dmonth1) and (dyear2 * 12 + dmonth2)


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[3]: [Ora] Никак не пойму в чем беда
От: DenisCh Россия  
Дата: 01.11.19 03:55
Оценка: :))) :))
Здравствуйте, Funny Rabbit, Вы писали:

FR> Все правильно выводит первый запрос. Дело в другом.

FR>
FR> select * from dual where 3 between 4 and 2
FR>

FR> Ничего не выводит
FR> а
FR>
FR> select * from dual where 3 between 2 and 4
FR>

FR> выводит. В этом проблема

Очень странно..
Этот оракл такой противоречивый...
[url=https://github.com/abbat/avalon1.0.449[/url]
Re[3]: [Ora] Никак не пойму в чем беда
От: TMU_1  
Дата: 01.11.19 15:29
Оценка: 4 (1) +3
S>>Для начала, посмотрите, что подхватывается селектом:
FR>Все правильно выводит первый запрос. Дело в другом.
FR>
FR>select * from dual where 3 between 4 and 2
FR>

FR>Ничего не выводит

FR>а

FR>
FR>select * from dual where 3 between 2 and 4
FR>

FR>выводит. В этом проблема



X between a and b это, на самом деле, (X >= a and X <= b).
Ты хочешь, чтобы выражение 3 >= 4 and 3 <= 2 вернуло True ?
Re: [Ora] Никак не пойму в чем беда
От: MasterZiv СССР  
Дата: 28.11.19 10:22
Оценка: :)
Здравствуйте, Funny Rabbit, Вы писали:

FR>
FR>select sum(vpd.nsumm)
FR>          into dbo
FR>          from T2 vpd
FR>         where vpd.nprn = user_num
FR>           and vpd.nyear between dyear1 and dyear2
FR>           and vpd.nmonth between dmonth1 and dmonth2;
FR>


FR>Но ничего не выводит. Почему?


Потому что INTO написал
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.