Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Переписать процедуру / 25 сообщений из 26, страница 1 из 2
10.11.2017, 15:02
    #39551047
Stebloid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Доброго времени суток.
Сама ситуация. Имеется некая база данных, и в ней с десяток процедур вида
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create or replace procedure procedure_name  as
..
begin
-- № 1
 if usl_1 then 
   else   err;
 end if;

-- № 2
if usl_2 then 
   else   err;
 end if;
..
-- № n
 if usl_n then ..
   else   err;
 end if;
end;


И время от времени приходится одно или несколько условий отключать путем комментирования кода этого условия для запуска процедуры. И настало время, когда надоело это делать руками, и хочется переписать процедуры для облегчения запуска.
Варианты видятся такие:
- добавить дополнительный параметр для запуска процедуры,в котором идут перечислением номера условий, и каждое условие обернуть в еще один if для проверки с параметром.
- подсказали еще вариант через сохранение текста процедур в таблицы, и уже оттуда пытаться собирать процедуру и запускать только с определенными строками(Rinka777).
Вопрос состоит в следующем- может быть есть еще какие-то варианты исполнения / решения получше ?

Код: plsql
1.
2.
3.
4.
5.
Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
PL/SQL Release 9.2.0.6.0 - Production
CORE	9.2.0.6.0	Production
TNS for Solaris: Version 9.2.0.6.0 - Production
NLSRTL Version 9.2.0.6.0 - Production
...
Рейтинг: 0 / 0
10.11.2017, 15:04
    #39551049
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Stebloidподсказали еще вариант через сохранение текста процедур в таблицы, и уже оттуда пытаться собирать процедуру и запускать только с определенными строками(Rinka777).Бред.
...
Рейтинг: 0 / 0
10.11.2017, 15:21
    #39551067
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Условную компиляцию не предлагать?
...
Рейтинг: 0 / 0
10.11.2017, 15:36
    #39551080
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Stebloid,

рефракторинг впритык к предметке, не городя огороды
...
Рейтинг: 0 / 0
10.11.2017, 16:04
    #39551109
Переписать процедуру
Stebloidнадоело это делать рукамиА в чем разница надоелости - руками менять процедуру, руками менять параметр или руками менять данные в таблице?
...
Рейтинг: 0 / 0
10.11.2017, 16:06
    #39551110
MazoHist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
andrey_anonymousУсловную компиляцию не предлагать?
9.2.0.6.0 - там еще ее нет, и она все же статическая - т.е. на этапе выполнения не изменить, нужна перекомпиляция.

Если нужно в рантайме - можно предложить использовать контексты, хотя это почти то же самое что параметры.
...
Рейтинг: 0 / 0
10.11.2017, 16:21
    #39551135
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
MazoHistandrey_anonymousУсловную компиляцию не предлагать?
9.2.0.6.0 - там еще ее нет, и она все же статическая
Пропустил этот момент.
На этой версии или кодогенерация, или параметры.
Что до статики - то правка кода тоже как бы статик.
...
Рейтинг: 0 / 0
10.11.2017, 16:36
    #39551164
rpovarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Stebloid,

В зависимости от количества условий. Если меньше десятка (условно), то параметрами. Если много - завести таблицу с параметрами. IMHO, генерировать код на лету стоит только если без этого совсем уж никак не обойтись.
...
Рейтинг: 0 / 0
10.11.2017, 16:38
    #39551169
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
rpovarovЕсли меньше десятка (условно), то параметрами.Одна битовая маска.
...
Рейтинг: 0 / 0
10.11.2017, 18:31
    #39551252
Stebloid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Благодарю откликнувшихся за ответы :-)
ma1tus,
Хм… под рефакторингом подразумевается в данном случае вообще выпиливание условий, которые отключаются? Или что-то другое?

Педаль ввода,
Надоело искать в коде условия и комментировать их, затем обратно включать. Это может длиться до двух часов непрерывно ( выключи этот, включи. Теперь следующие условия). Я себе конечный итог переделки видел без своего участия на отключение условий- если надо что-то отключить, то просто ввели в параметре номера условий и без них процедура отработала.

rpovarov,
Условий разброс от 100 до ~ 600 штук.
Подразумевается двустолбцовая таблица, в которой каждому условию будет соответствовать определеный номер?

Elic,
Не сталкивался, читаю. Bitand заменяет like по строке для цифр?
...
Рейтинг: 0 / 0
10.11.2017, 18:39
    #39551255
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
StebloidНе сталкивался, читаю. Bitand заменяет like по строке для цифр?Если смотреть с такой точки зрения, то беспроцентный.
...
Рейтинг: 0 / 0
10.11.2017, 18:42
    #39551258
Stebloid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Забыл свои маленькие нагрузки:
Добро на отключение условий дают 5 человек. Всего пользователей 300. Основной пик нагрузки конец месяца, когда начинается отчетный период.
...
Рейтинг: 0 / 0
10.11.2017, 18:46
    #39551259
Stebloid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
AmKad,

Ясненько. Выходит, если его использовать, то надо будет сразу оговаривать - ввод номеров условий сплошной строкой без пробелов и запятых
...
Рейтинг: 0 / 0
10.11.2017, 18:50
    #39551264
j2k
j2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Stebloid Условий разброс от 100 до ~ 600 штук.
Stebloid ввод номеров условий сплошной строкой без пробелов и запятых
бедные пользователи, за что вы так с ними? :D
...
Рейтинг: 0 / 0
10.11.2017, 18:57
    #39551266
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Табличка с параметрами, к табличке - UIшечка и кнопка "пересчитать", доступ у тех пятерых, кто рулит включением/отключением условий.
...
Рейтинг: 0 / 0
11.11.2017, 04:11
    #39551377
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Stebloidподразумевается в данном случаеесли каждая из имеющихся процедур выполняет свою производственную задачу с опциями - тогда завести параметры в самих процедурах, если - нет, то все, независящие от других условия, выпилить в отдельные, выполняющие свой минимум, вынося параметры на уровень выше - куда-то в механизм сборки запускаемых комплексов этих процедур.
...
Рейтинг: 0 / 0
11.11.2017, 08:20
    #39551380
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
StebloidВыходит, если его использовать, то надо будет сразу оговаривать - ввод номеров условий сплошной строкой без пробелов и запятыхКак можно заниматься программированием не понимая, сто такое битовая маска?
...
Рейтинг: 0 / 0
11.11.2017, 10:29
    #39551400
Stebloid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
j2k,
Так исторрчески сложилось. В строчку смогут ввести свои условия, максимум на отключение не больше 10 условий.

andrey_anonymous,
Что-то такое и представлял- две версии для запускав меню : стандартная со всеми условиями и на отключение с окном для ввода условий.

ma1tus,
Идея интресная по разделению процедур на отключаемые условия и нет, но к сожалению,набор условий на отключение не статичен и разный, и я не в состоянии угадать какие будут отключены в следующий раз. Хм…если делать дополнительную процедуру с отключаемыми условиями, то ее пополнять новыми условиями на отключение когда требуется. В каждой из процедур есть 2-3 условия которые чаще других попадаются, их уже быстро нахожу. И только из-за них новую процедуру писать как-то не то. Хотелось как-то комплексно решить этот вопрос без возврата к нему.

Elic,
Какой-то провакационный вопрос… ограниченно в решениях, наверно так отвечу. Без маски этой, разбирал бы строку через like и что-нибудь городил бы с поиском/проверкой запятой.
...
Рейтинг: 0 / 0
11.11.2017, 15:09
    #39551476
казинак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Stebloid,

прежде чем куевертить свою переделку, ответь на вопросы?
1)код работает правильно?
2)код работает быстро?
3)код не мешает другим процессам?

если все три ответа - ДА,
то значит, что это чисто твое, субъективное, неприятие чужого стиля

и где гарантии, что твои переделки не сломают нах всю систему?
...
Рейтинг: 0 / 0
12.11.2017, 10:18
    #39551650
Stebloid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
казинак,
Про стиль написания кода пока вопросов нет, хотя там тоже есть над чем поработать. Для меня все выглядит так, что в начале было мало условий и не задумывались о расширении/поддержки кода в будущем. Потом на каком-то этапе развития системы происходит лавинообразный рост числа условий( или в законодательстве изменения, или еще что-то), а как работали через отключение так и продолжили- мы так привыкли уже. Я считаю, что процесс " ввести в форму условия, запустить процедуру, посмотреть результат" будет быстрее чем " позвонить для отключения условия, найти условие, отключить его,скомпилировать процедуру, запустить ее, посмотреть результат, включить условие, снова скомпилировать процедуру".
...
Рейтинг: 0 / 0
13.11.2017, 06:35
    #39551905
Kido
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Почему бы не сделать настроичную таблицу, куда можно положить код условия и флаг его активности?

В начале процедуры вычитывать эти данные и использовать в ваших if-ах. При надобности, что бы отключить какое либо из условий, просто убираете флаг активности и не надо ничего перекомпилировать
...
Рейтинг: 0 / 0
13.11.2017, 09:47
    #39551965
Stebloid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Kido,
Это очень позоже на вот этот вариант:
andrey_anonymousТабличка с параметрами, к табличке - UIшечка и кнопка "пересчитать", доступ у тех пятерых, кто рулит включением/отключением условий.

Спасибо всем откликнувшимся за варианты!
Значит, на этой версии Oracle не так уж и много решений этого вопроса.
...
Рейтинг: 0 / 0
13.11.2017, 18:52
    #39552470
rpovarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
Stebloid Условий разброс от 100 до ~ 600 штук.
Подразумевается двустолбцовая таблица, в которой каждому условию будет соответствовать определеный номер?

1. профиль/template
2. номер/название/id условия
3. переключатель условия

Столбец "профиль" нужен, чтобы постоянно не редактировать таблицу, а наполнить сразу часто используемыми комбинациями, и запускать процедуру только с названием профиля.

Можно добавить столбцы valid_from и valid_to, чтобы у условия было ещё и время действия (если нужно).
...
Рейтинг: 0 / 0
14.11.2017, 09:19
    #39552643
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
StebloidВопрос состоит в следующем- может быть есть еще какие-то варианты исполнения / решения получше ?

Пересмотреть причины по которым выбрана такая архитектура решения - не предлагать?
Сходу предположу, что это "уни кальность кода" и тому подобные абстракции, которые хорошо смотрятся на уровне ООП, но бредово реализуются на уровне РСУБД.
...
Рейтинг: 0 / 0
15.11.2017, 15:05
    #39553598
Stebloid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переписать процедуру
rpovarov,
Спасибо за уточнение. =)

env,
Скорей всего, это так исторически сложилось , а также требования законодательства к отдельным этапам ввода и сопровождения информации. Какой-либо уникальности, думаю нет.Структура в общих чертах такая :
Есть бумажные документы, есть их электронная форма в браузере на Oracle Forms, заполняемая сотрудниками в регионах. Часть критически важных/основных полей проверяется при заполнении сразу на форме. Остальные требования к заполнению проверяются уже после commit`a в промежуточную таблицу запуском процедуры. И она же выдает результат в духе "поле 1 неправильно заполнено". И если нет ни каких ошибок, то данные начинают видеть в центральном офисе. Там ждут уже бумажный документ для сверки набитых данных и бумаги. И тут уже возникают моменты с отключением условий (старые документы, для которых уже не подходят требования законодательства, но данные нужны или просто какие-либо хотелки), что бы данные попали уже непосредственно в "боевую базу". Соответственно, время от времени вносятся изменения как в бумажный документ, так и в электронную форму, и в процедуры, и в таблицы и т.д. Этот процесс идет где-то с 2005г.
Я еще не представляю как можно это по другому реализовать. Поэтому, пока, решил взяться за кусок, который больше понимаю и смогу облегчить, как для себя, так, и может для будущих работников- разобраться с условиями и процедурами.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Переписать процедуру / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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