powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вынести запрос из using в merge в курсор
3 сообщений из 3, страница 1 из 1
Вынести запрос из using в merge в курсор
    #40077258
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется такой merge
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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 запрос
Код: plsql
1.
2.
3.
4.
5.
6.
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 использовать этот курсор.

У меня есть сложность с синтаксисом создания курсора из этого запроса.
Или какие ещё есть варианты...
...
Рейтинг: 0 / 0
Вынести запрос из using в merge в курсор
    #40077279
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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.
...
Рейтинг: 0 / 0
Вынести запрос из using в merge в курсор
    #40077597
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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.
Хм, действительно.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вынести запрос из using в merge в курсор
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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