powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / входящие/исходящие параметры в запросе
4 сообщений из 4, страница 1 из 1
входящие/исходящие параметры в запросе
    #40037322
minimisho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, нужна прям помощь-помощь. Есть функция, возвращающая id-шки и фамилии по некоторым параметрам. Запрос выглядит примерно так :
Код: 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.
SELECT a.id, a.fio
  FROM (SELECT CASE
                  WHEN (z.param = param1)
                  THEN
                     user1
                  WHEN (y.param = param2) 
                   AND (z.param = param3)
                  THEN
                     user2
                  WHEN     (x.param = param3)
                       AND (y.param = param5)
                       AND (z.param = param6)
                  THEN
                     user3
                  WHEN (x.param = param7) 
                   AND (z.param = param8)
                  THEN
                     user4 
                     etc etc
               END   AS fio,
               s.id
          FROM table_z z 
            LEFT JOIN table_x x
               etc
                  )  a;


В статике всё выглядит и работает вполне себе, как надо. но есть одно "но". Параметры (param1, param2 и т.д.) и юзеры (user1, 2 и т.п.) в какой-то момент времени могут поменяться, и для актуализации информации функцию придется перекомпилироивать, чего очень не хотелось бы. В итоге, интуиция мне подсказывает, что выход может быть в какой-нибудь настроичной таблице, но, чем больше я думаю о её структуре, тем круглее становится моя голова и жиже мозг. Подскажите выход :)
...
Рейтинг: 0 / 0
входящие/исходящие параметры в запросе
    #40037326
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архитектура непонятна.

Обычно передачей параметров в БД озабачивается клиентское приложение, и ни о какой таблице параметров (именно в запросе) речи не идет. Параметры могу доставаться отдельными запросами перед подачей основного запроса.

Опишите детальнее, как у вас происходит запрос этих ID и FIO, кто их запрашивает, как и куда передаются параметры.
...
Рейтинг: 0 / 0
входящие/исходящие параметры в запросе
    #40037333
minimisho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо. Процедура (по ошибке обозвал её функцией, каюсь) insert_table вызывается джобом по расписанию.
Код: 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.
32.
33.
34.
35.
 PROCEDURE insert_table
   IS 
   BEGIN
      DELETE FROM MY_TABLE;

      INSERT INTO MY_TABLE (ID, FIO)
      select a.ID, a.FIO
           FROM (SELECT CASE
                           WHEN (z.field = '01')
                           THEN 
                              'USER_1'
                           WHEN (dp.VALUE = 'Э') AND (z.field = '02')
                           THEN
                              'USER_2'
                           WHEN (dp.VALUE <> 'Э') AND (z.field = '03')
                           THEN
                              'USER_3'
                           WHEN (dp.VALUE <> 'Э') AND (z.field = '04')
                           THEN
                              'USER_4'
                           WHEN     (dpn.VALUE IN ('ALPHA', 'BETA'))  AND (z.field = '04')
                           THEN
                              'USER_1'
                        END
                           AS fio,
                        s.id
                   FROM do  d
                        LEFT JOIN DO_PROP dp
                           ON     dp.ORDER_ID = d.ORDER_ID
                        LEFT JOIN DP_PROP dpn
                           ON     dpn.ORDER_ID = d.ORDER_ID
                        LEFT JOIN sr s ON s.ID = d.ORDER_ID
                        LEFT JOIN pz z ON z.id = s.z_id
                  ) a;
 END;


Проблема в следующем. Если я захочу сказать, что по параметрам
Код: plsql
1.
(dp.VALUE = 'Э') AND (z.field = '02')

FIO вместо USER_2 должно быть USER_3, мне придется перекомпилить процедуру.
Ровно как и в обратную сторону, если я захочу сказать, что
Код: plsql
1.
 (dp.VALUE = 'Э') AND (z.field = '02')

теперь выглядит как
Код: plsql
1.
 (dp.VALUE <> 'Э') AND (z.field = '02')

я опять же вынужден перекомпилить процедуру.
Хотелось бы избежать перекомпиляций и управлять этим более простым способом.
...
Рейтинг: 0 / 0
входящие/исходящие параметры в запросе
    #40037355
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
minimisho,

текст CASE WHEN (z.field = '01') ... храните в табличке

инсерт формируйте динамически

ps
самое простое ето execute immediate

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


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