Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MODEL clause conditional upsert / 7 сообщений из 7, страница 1 из 1
19.12.2019, 18:32
    #39905766
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MODEL clause conditional upsert
Вот если я не хочу создавать значение my_value[777] (хочу чтобы его не было) в случае, если значение my_value[666] = 13, а иначе хочу чтобы было my_value[777] = my_value[666], что мне делать?
measures (my_value) ignore nav
rules (
my_value[777] = ???
)
...
Рейтинг: 0 / 0
19.12.2019, 18:42
    #39905771
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MODEL clause conditional upsert
Код: 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.
26.
27.
28.
29.
30.
31.
SQL> select  *
  2    from  dual
  3    model
  4      dimension by(1 id)
  5      measures(0 my_value) ignore nav
  6      rules(
  7            my_value[666] = &val,
  8            my_value[case my_value[666] when 13 then 666 else 777 end] = my_value[666]
  9           )
 10  /
Enter value for val: 13
old   7:           my_value[666] = &val,
new   7:           my_value[666] = 13,

        ID   MY_VALUE
---------- ----------
         1          0
       666         13

SQL> /
Enter value for val: 15
old   7:           my_value[666] = &val,
new   7:           my_value[666] = 15,

        ID   MY_VALUE
---------- ----------
         1          0
       666         15
       777         15

SQL> 



SY.
...
Рейтинг: 0 / 0
19.12.2019, 18:47
    #39905774
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MODEL clause conditional upsert
SY,

не, ну это конечно финт ушами!
спасибо!

а по-человечески нельзя?
...
Рейтинг: 0 / 0
19.12.2019, 19:46
    #39905787
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MODEL clause conditional upsert
То есть, если условие зависит от нескольких ячеек (к примеру my_value[666] и my_value[911])
и если их сумма равна 13, то my_value[777] создавать не надо
иначе надо my_value[777] = my_value[666] + my_value[911]

я попробовал так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with
x as (
select 1 a, 666 b, 10 my_value from dual union all
select 1 a, 911 b, 3 my_value from dual union all
select 2 a, 666 b, 10 my_value from dual union all
select 2 a, 911 b, 4 my_value from dual
)
select *
     from x
     model
          return updated rows
          partition by (a)
          dimension by (b)
          measures (my_value)
          rules (
                my_value[case my_value[666] + my_value[911] when 13 then null else 777 end] = my_value[666] + my_value[911],
                my_value[b = case my_value[666] + my_value[911] when 13 then null else 778 end] = my_value[666] + my_value[911]
          )

ни то ни другое не помогает
...
Рейтинг: 0 / 0
19.12.2019, 20:31
    #39905799
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MODEL clause conditional upsert
--Eugene--,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with
x as (
select 1 a, 666 b, 10 my_value from dual union all
select 1 a, 911 b, 3 my_value from dual union all
select 2 a, 666 b, 10 my_value from dual union all
select 2 a, 911 b, 4 my_value from dual
)
select a, x as b, my_value
     from x
     model
          return updated rows
          partition by (a)
          dimension by (b, b x)
          measures (my_value)
          rules upsert all (
                my_value[my_value[666,666] + my_value[911,911] =13 and b=911, 777] = case my_value[666,666] + my_value[911,9111] when 13 then -1 else my_value[666,666] + my_value[911,911] end
          )
...
Рейтинг: 0 / 0
19.12.2019, 21:15
    #39905812
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MODEL clause conditional upsert
Поясняя необходимость дополнительного измерения.

Условие для upsert можно указать только в символьной нотации.
С другой стороны значение измерения для символьной нотации должно существовать до применения модели.
А значение 777 должно быть указано в позиционной, чтоб быть условно добавляемым.
Соответственно надо минимум две меры.

Если у тебя есть другая мера с гарантированно существующим элементом,
то выделенное красным можно пренести в симпольную нотацию для неё, а иначе надо создавать фейковую.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
          return updated rows
          partition by (a)
          dimension by (1 dummy, b)
          measures (my_value)
          rules upsert all
          (
                my_value[dummy = 1 and my_value[1, 666] + my_value[1, 911] != 13, 777] = my_value[1, 666] + my_value[1, 911]
          )
...
Рейтинг: 0 / 0
19.12.2019, 21:45
    #39905817
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MODEL clause conditional upsert
Кобанчег
Если у тебя есть другое измерение с гарантированно существующим элементом,
то выделенное красным можно пренести в символьную нотацию для него, а иначе надо создавать фейковое измерение.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MODEL clause conditional upsert / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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