Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / хз, наверно уработался. / 25 сообщений из 48, страница 1 из 2
14.08.2017, 16:35
    #39505089
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
есть такой код :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
......
for rec in ( select  t.PARTNER 
                from  t
            WHERE 1=1
                AND t.date >= '01.01.2017' order by t.PARTNER asc
           ) loop
   
   select max(r.date)
     into v_r
     from HISTORY r
    where rec.PARTNER = r.partner;
    
 merge into HISTORY t
            using(SELECT u.partner,                         
            FROM  uc u
            WHERE 1=1
                     AND u.dater >= nvl(v_r, to_date ('01.01.2017', 'dd.mm.yyyy'))) w
            on (t.PARTNER = w.PARTNER )
            WHEN NOT MATCHED THEN INSERT 
            (t.PARTNER
           ) 
            VALUES 
            (w.partner
           )
            ;



гарантированно ли в v_r всегда получу null, в случае если не явный курсор rec вернул того партнера которого нет в HISTORY r.
какие могут быть сложности?
...
Рейтинг: 0 / 0
14.08.2017, 16:50
    #39505098
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
saxarockесть такой код :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
......
for rec in ( select  t.PARTNER 
                from  t
            WHERE 1=1
                AND t.date >= '01.01.2017' order by t.PARTNER asc --NLS мина
           ) loop
..



гарантированно ли в v_r всегда получу null, в случае если не явный курсор rec вернул того партнера которого нет в HISTORY r.
какие могут быть сложности?

Для чего здесь цикл? Почему нельзя написать просто один merge с (select partner, case when max(date) > to_date ...) как источник?
...
Рейтинг: 0 / 0
14.08.2017, 16:56
    #39505103
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
envДля чего здесь цикл?+1
saxarockгарантированно ли в v_r всегда получу null, в случае если не явный курсор rec вернул того партнера которого нет в HISTORY r.На ручнике? Что можно вернуть из ничего?
...
Рейтинг: 0 / 0
14.08.2017, 17:06
    #39505110
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
saxarockесть такой код :
Код: plsql
1.
2.
3.
4.
5.
6.
......

                AND t.date >= '01.01.2017' order by t.PARTNER asc
...
                     AND u.dater >= nvl(v_r, to_date ('01.01.2017', 'dd.mm.yyyy'))) w
...




NLS в одном куске криво, в другом прямо
...
Рейтинг: 0 / 0
14.08.2017, 17:09
    #39505112
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
env, Elic,
Env про явное приведение к типам знаю, но спс за выделение.
Смысл в том чтобы дергать данные у найденых партнеров с момента последнего merge, r.date =sysdate а не смотреть все время с 01.01.2017. Так что по вопросу?
...
Рейтинг: 0 / 0
14.08.2017, 17:11
    #39505113
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
saxarock,

Какая связь между таблицами t и uc и их полями t.date и u.dater?
...
Рейтинг: 0 / 0
14.08.2017, 17:21
    #39505119
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
saxarock,

навскидку, как-то так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
merge into history tgt 
using (
       select u.partner 
       from uc u 
            inner join (select t.partner from t where t.date >= date '2017-01-01') tt
              on tt.partner = u.partner
            left join (select h.partner, max(h.date) hist_date from history h group by h.partner) mh
              on mh.partner = u.partner
       where u.dater >= nvl(mh.hist_date, date '2017-01-01')
       ) src  
on (src.partner = tgt.partner) ....


Несколько напрягает отсутствие понимания, сколько записей на одного partner приходится в uc.
...
Рейтинг: 0 / 0
14.08.2017, 17:22
    #39505123
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
env,

При желании можно отсечку по t и внутрь mh протолкнуть
...
Рейтинг: 0 / 0
14.08.2017, 17:23
    #39505125
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
envКакая связь между таблицами t и uc и их полями t.date и u.dater?

Связь описана в merge, r.date = sysdate каждого merge. Смысл сего я описал выше.
...
Рейтинг: 0 / 0
14.08.2017, 17:24
    #39505128
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
saxarock
гарантированно ли в v_r всегда получу null, в случае если не явный курсор rec вернул того партнера которого нет в HISTORY r.

да, гарантировано получите null

.....
stax
...
Рейтинг: 0 / 0
14.08.2017, 17:24
    #39505129
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
envсколько записей на одного partner приходится в uc.
связь 1=1.
...
Рейтинг: 0 / 0
14.08.2017, 17:25
    #39505131
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
Staxда, гарантировано получите null


При любой агрегатной функции?
...
Рейтинг: 0 / 0
14.08.2017, 17:27
    #39505134
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
saxarock,

Если явно не будете оборачивать.
Я правильно Вас понял, что в цикле между select и merge есть дополнительная логика?
...
Рейтинг: 0 / 0
14.08.2017, 17:35
    #39505143
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
saxarock,

насчет любой, а не уверен (много новых екзотических ф-ций)

древние (и select без group by) вернут null

....
stax
...
Рейтинг: 0 / 0
14.08.2017, 17:36
    #39505145
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
Stax,

без group by можно и no_data_found словить
...
Рейтинг: 0 / 0
14.08.2017, 17:38
    #39505148
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
saxarockStaxда, гарантировано получите null


При любой агрегатной функции?

первая по списку

Код: plsql
1.
2.
3.
4.
5.
6.
  1* select collect(HIREDATE) d from emp where ename='stax'
SQL> /

D
--------------------------------------------------------------------------------
SYSTPVriabtHgbO/gU0gEqMCtuw==()



......
stax
...
Рейтинг: 0 / 0
14.08.2017, 17:43
    #39505155
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
Staxsaxarock,

насчет любой, а не уверен (много новых екзотических ф-ций)

древние (и select без group by) вернут null

....
stax
приврал count% вернет 0

.....
stax
...
Рейтинг: 0 / 0
14.08.2017, 17:45
    #39505160
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
envЯ правильно Вас понял, что в цикле между select и merge есть дополнительная логика?
да есть, saxarockСмысл в том чтобы дергать данные у найденных партнеров с момента последнего merge, r.date = sysdate(т.е. текущая дата merge) а не смотреть все время с 01.01.2017.

т.е. искать в w
Код: plsql
1.
(select ... from ... where u.dater >= nvl(v_r,  to_date ('01.01.2017', 'dd.mm.yyyy')) )


не все время за to_date ('01.01.2017', 'dd.mm.yyyy'), а с даты max(r.date) (даты последнего merge, я ж говорил что saxarockr.date = sysdate каждого merge. )
env, не внимательно читаете.
...
Рейтинг: 0 / 0
14.08.2017, 17:48
    #39505162
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
envStax,

без group by можно и no_data_found словить

Код: plsql
1.
2.
3.
4.
5.
6.
  1* select cume_dist() over(order by ename) d from emp where ename='stax'
SQL> /

no rows selected

SQL>



....
stax
...
Рейтинг: 0 / 0
14.08.2017, 17:51
    #39505167
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
Stax,

Ладно, ладно насчет любой агрегатной я загнул.))
...
Рейтинг: 0 / 0
14.08.2017, 17:55
    #39505172
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
saxarock,

Сумбурная постановка задачи предполагает сумбурные же ответы.

Из первого поста не видно наличие промежуточной логики между for loop и merge - откуда и напрашивается решение исходной задачи одним запросом.


saxarockenv, не внимательно читаете.
Код: plsql
1.
u.dater >= nvl(mh.hist_date, date '2017-01-01')


правда?

В такой постановке, да, max() вернёт null при отсутствии записей, подпадающей под условие.

Стас, а теперь тоже самое но с select ... into
...
Рейтинг: 0 / 0
14.08.2017, 17:59
    #39505182
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
Всем спасибо. Насчет любой агрегатной можно поразмышлять дальше.
...
Рейтинг: 0 / 0
14.08.2017, 18:01
    #39505186
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
envСумбурная постановка задачи предполагает сумбурные же ответы.


согласен, без внятного тз, результат хз.
...
Рейтинг: 0 / 0
14.08.2017, 18:03
    #39505191
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
envСтас, а теперь тоже самое но с select ... into

для какой ф-ции?

cume_dist немножко приврал, аналитика, а не агрегация

зи
по списку шел

.....
stax
...
Рейтинг: 0 / 0
14.08.2017, 18:09
    #39505196
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хз, наверно уработался.
env,

пока что не нарвался на no data found
не нулл
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  1  declare
  2   v_pr number;
  3  begin
  4   SELECT PERCENT_RANK(15000, .05) WITHIN GROUP (ORDER BY sal, comm)
  5   INTO v_pr
  6   FROM emp
  7   where ename='stax';
  8   dbms_output.put_line('PERCENT_RANK='||v_pr);
  9* end;
SQL> /
PERCENT_RANK=0

PL/SQL procedure successfully completed.



.....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / хз, наверно уработался. / 25 сообщений из 48, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]