powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MODEL clause conditional upsert
7 сообщений из 7, страница 1 из 1
MODEL clause conditional upsert
    #39905766
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот если я не хочу создавать значение my_value[777] (хочу чтобы его не было) в случае, если значение my_value[666] = 13, а иначе хочу чтобы было my_value[777] = my_value[666], что мне делать?
measures (my_value) ignore nav
rules (
my_value[777] = ???
)
...
Рейтинг: 0 / 0
MODEL clause conditional upsert
    #39905771
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
MODEL clause conditional upsert
    #39905774
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

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

а по-человечески нельзя?
...
Рейтинг: 0 / 0
MODEL clause conditional upsert
    #39905787
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть, если условие зависит от нескольких ячеек (к примеру 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
MODEL clause conditional upsert
    #39905799
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
--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
MODEL clause conditional upsert
    #39905812
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясняя необходимость дополнительного измерения.

Условие для 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
MODEL clause conditional upsert
    #39905817
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кобанчег
Если у тебя есть другое измерение с гарантированно существующим элементом,
то выделенное красным можно пренести в символьную нотацию для него, а иначе надо создавать фейковое измерение.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MODEL clause conditional upsert
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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