powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выбрать 1 UID или 2 UIDa
6 сообщений из 6, страница 1 из 1
Выбрать 1 UID или 2 UIDa
    #39338764
AK-Shah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Чтобы смоделировать проблему - используем

Код: plsql
1.
2.
3.
begin
DBMS_SESSION.SET_CONTEXT('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ', 61392);             
end;




Хочется записать запрос, который возвращает UID в зависимости от значения 'П_ГРУППА_КЛИЕНТОВ', причем, если
sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ') = 61392, то надо вернуть два значения: 61392 и 61397.

Два значения можно выбрать так:
SELECT 61392 "uid" FROM DUAL
UNION ALL
SELECT 61397 "uid" FROM DUAL

Учитывая все это, как написать запрос ( НЕ ИСПОЛЬЗУЯ ДИНАМИЧЕСКИЕ ЗАПРОСЫ! ), который вернет 1 UID или 2 UIDa

Вот такой возвращает ошибку:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT CASE 
           WHEN sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ') <> 61392 
                THEN to_number(sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ')) 
           ELSE (    
                       SELECT 61392 "uid" FROM DUAL
                       UNION ALL
                       SELECT 61397 "uid" FROM DUAL   
                 )      
       END "uid"
FROM DUAL 
...
Рейтинг: 0 / 0
Выбрать 1 UID или 2 UIDa
    #39338793
AK-Shah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришла идея выравнять количество UIDов через UNION - если один UID его можно просто выбрать 2 раза (смысл по сути не изменится):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
                                                                                      SELECT CASE 
                                                                                                 WHEN sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ') <> 61392 
                                                                                                      THEN to_number(sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ')) 
                                                                                                 ELSE 61392   
                                                                                             END "uid"
                                                                                       FROM DUAL 
                                                                                       UNION ALL       
                                                                                       SELECT CASE 
                                                                                                  WHEN sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ') <> 61392 
                                                                                                       THEN to_number(sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ')) 
                                                                                                  ELSE 61397
                                                                                              END "uid"
                                                                                       FROM DUAL    
...
Рейтинг: 0 / 0
Выбрать 1 UID или 2 UIDa
    #39338795
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка то какая?
Что ты Сам думаешь о этой ошибке? (если перевести)
...
Рейтинг: 0 / 0
Выбрать 1 UID или 2 UIDa
    #39338818
AK-Shah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто ты Сам думаешь о этой ошибке? (если перевести)

Смысл ошибки был понятен, а как ее исправлять - не мог придумать. :)

Может покороче можно?
...
Рейтинг: 0 / 0
Выбрать 1 UID или 2 UIDa
    #39338941
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AK-ShahМожет покороче можно?

Код: plsql
1.
2.
3.
4.
5.
 SELECT  sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ') "uid" FROM DUAL
UNION ALL
 SELECT  61397 FROM DUAL
   WHERE sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ') = 61392
/



SY.
...
Рейтинг: 0 / 0
Выбрать 1 UID или 2 UIDa
    #39339193
AK-Shah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYAK-ShahМожет покороче можно?

Код: plsql
1.
2.
3.
4.
5.
 SELECT  sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ') "uid" FROM DUAL
UNION ALL
 SELECT  61397 FROM DUAL
   WHERE sys_context('CLIENTCONTEXT','П_ГРУППА_КЛИЕНТОВ') = 61392
/



SY.

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


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