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

Откуда:
Сообщений: 2420
Имеется такой merge
merge into auth_attrib aa
  using (select x.attrib_id
			   ,x.enabled
			   ,x.value
		 from   xmltable('/root/item' passing xmltype(pattribs) columns attrib_id number path 'attribId'
						,enabled number path 'authAttributeEnabled'
						,value varchar2(100) path 'value') x) v
  on (aa.auth_group_id = pauth_group_id and aa.attrib_id = v.attrib_id and aa.value = v.value)
  when matched then
	 update set aa.enabled = v.enabled where aa.enabled <> v.enabled
  when not matched then
	 insert (auth_group_id, attrib_id, value, enabled) values (pauth_group_id, v.attrib_id, v.value, v.enabled);
  cert_registr_ctx.reset_context;
  return sql%rowcount;
exception
  when others then
	 cert_registr_ctx.reset_context;


Нужно для определённых значений v.attrib_id изменить условие в on(убрать and aa.value = v.value).

Насколько я понимаю, внутри одного выражения merge сделать такое ветвление не получится.

Как тут лучше поступить? Мне видится вариант вынести из using запрос
select x.attrib_id
			   ,x.enabled
			   ,x.value
		 from   xmltable('/root/item' passing xmltype(pattribs) columns attrib_id number path 'attribId'
						,enabled number path 'authAttributeEnabled'
						,value varchar2(100) path 'value') x 


и объявить курсор с этой таблицей. А потом сделать два merge, которые будут выполняться в зависимости от значения v.attrib_id(где v будет уже курсором). И в using использовать этот курсор.

У меня есть сложность с синтаксисом создания курсора из этого запроса.
Или какие ещё есть варианты...
11 июн 21, 16:50    [22334505]     Ответить | Цитировать Сообщить модератору
 Re: Вынести запрос из using в merge в курсор  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10215
on (
        aa.auth_group_id = pauth_group_id
    and
        aa.attrib_id = v.attrib_id
    and (
            v.attrib_id in (список определённых значений)
         or
            aa.value = v.value
        )
    )


SY.
11 июн 21, 18:05    [22334542]     Ответить | Цитировать Сообщить модератору
 Re: Вынести запрос из using в merge в курсор  [new]
XEugene
Member

Откуда:
Сообщений: 2420
SY
on (
        aa.auth_group_id = pauth_group_id
    and
        aa.attrib_id = v.attrib_id
    and (
            v.attrib_id in (список определённых значений)
         or
            aa.value = v.value
        )
    )


SY.
Хм, действительно.
15 июн 21, 11:39    [22335302]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить