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

Откуда: Зеленоград
Сообщений: 11
Доброго времени суток.
Сама ситуация. Имеется некая база данных, и в ней с десяток процедур вида
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).
Вопрос состоит в следующем- может быть есть еще какие-то варианты исполнения / решения получше ?

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
10 ноя 17, 15:02    [20943933]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром началась. КЯЗ
Сообщений: 27392
Stebloid
подсказали еще вариант через сохранение текста процедур в таблицы, и уже оттуда пытаться собирать процедуру и запускать только с определенными строками(Rinka777).
Бред.
10 ноя 17, 15:04    [20943941]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16186
Условную компиляцию не предлагать?
10 ноя 17, 15:21    [20944017]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
ma1tus
Member

Откуда:
Сообщений: 453
Stebloid,

рефракторинг впритык к предметке, не городя огороды
10 ноя 17, 15:36    [20944080]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Педаль ввода
Guest
Stebloid
надоело это делать руками
А в чем разница надоелости - руками менять процедуру, руками менять параметр или руками менять данные в таблице?
10 ноя 17, 16:04    [20944201]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
MazoHist
Guest
andrey_anonymous
Условную компиляцию не предлагать?

9.2.0.6.0 - там еще ее нет, и она все же статическая - т.е. на этапе выполнения не изменить, нужна перекомпиляция.

Если нужно в рантайме - можно предложить использовать контексты, хотя это почти то же самое что параметры.
10 ноя 17, 16:06    [20944203]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16186
MazoHist
andrey_anonymous
Условную компиляцию не предлагать?

9.2.0.6.0 - там еще ее нет, и она все же статическая

Пропустил этот момент.
На этой версии или кодогенерация, или параметры.
Что до статики - то правка кода тоже как бы статик.
10 ноя 17, 16:21    [20944271]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
rpovarov
Member

Откуда:
Сообщений: 36
Stebloid,

В зависимости от количества условий. Если меньше десятка (условно), то параметрами. Если много - завести таблицу с параметрами. IMHO, генерировать код на лету стоит только если без этого совсем уж никак не обойтись.
10 ноя 17, 16:36    [20944318]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром началась. КЯЗ
Сообщений: 27392
rpovarov
Если меньше десятка (условно), то параметрами.
Одна битовая маска.
10 ноя 17, 16:38    [20944325]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Stebloid
Member

Откуда: Зеленоград
Сообщений: 11
Благодарю откликнувшихся за ответы :-)
ma1tus,
Хм… под рефакторингом подразумевается в данном случае вообще выпиливание условий, которые отключаются? Или что-то другое?

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

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

Elic,
Не сталкивался, читаю. Bitand заменяет like по строке для цифр?
10 ноя 17, 18:31    [20944682]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
AmKad
Member

Откуда:
Сообщений: 4620
Stebloid
Не сталкивался, читаю. Bitand заменяет like по строке для цифр?
Если смотреть с такой точки зрения, то беспроцентный.
10 ноя 17, 18:39    [20944707]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Stebloid
Member

Откуда: Зеленоград
Сообщений: 11
Забыл свои маленькие нагрузки:
Добро на отключение условий дают 5 человек. Всего пользователей 300. Основной пик нагрузки конец месяца, когда начинается отчетный период.
10 ноя 17, 18:42    [20944713]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Stebloid
Member

Откуда: Зеленоград
Сообщений: 11
AmKad,

Ясненько. Выходит, если его использовать, то надо будет сразу оговаривать - ввод номеров условий сплошной строкой без пробелов и запятых
10 ноя 17, 18:46    [20944721]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
j2k
Member

Откуда: Новосибирск
Сообщений: 474
Stebloid
Условий разброс от 100 до ~ 600 штук.

Stebloid
ввод номеров условий сплошной строкой без пробелов и запятых

бедные пользователи, за что вы так с ними? :D
10 ноя 17, 18:50    [20944731]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16186
Табличка с параметрами, к табличке - UIшечка и кнопка "пересчитать", доступ у тех пятерых, кто рулит включением/отключением условий.
10 ноя 17, 18:57    [20944740]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
ma1tus
Member

Откуда:
Сообщений: 453
Stebloid
подразумевается в данном случае
если каждая из имеющихся процедур выполняет свою производственную задачу с опциями - тогда завести параметры в самих процедурах, если - нет, то все, независящие от других условия, выпилить в отдельные, выполняющие свой минимум, вынося параметры на уровень выше - куда-то в механизм сборки запускаемых комплексов этих процедур.
11 ноя 17, 04:11    [20945285]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром началась. КЯЗ
Сообщений: 27392
Stebloid
Выходит, если его использовать, то надо будет сразу оговаривать - ввод номеров условий сплошной строкой без пробелов и запятых
Как можно заниматься программированием не понимая, сто такое битовая маска?
11 ноя 17, 08:20    [20945324]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Stebloid
Member

Откуда: Зеленоград
Сообщений: 11
j2k,
Так исторрчески сложилось. В строчку смогут ввести свои условия, максимум на отключение не больше 10 условий.

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

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

Elic,
Какой-то провакационный вопрос… ограниченно в решениях, наверно так отвечу. Без маски этой, разбирал бы строку через like и что-нибудь городил бы с поиском/проверкой запятой.
11 ноя 17, 10:29    [20945395]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
казинак
Member

Откуда:
Сообщений: 1015
Stebloid,

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

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

и где гарантии, что твои переделки не сломают нах всю систему?
11 ноя 17, 15:09    [20945746]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Stebloid
Member

Откуда: Зеленоград
Сообщений: 11
казинак,
Про стиль написания кода пока вопросов нет, хотя там тоже есть над чем поработать. Для меня все выглядит так, что в начале было мало условий и не задумывались о расширении/поддержки кода в будущем. Потом на каком-то этапе развития системы происходит лавинообразный рост числа условий( или в законодательстве изменения, или еще что-то), а как работали через отключение так и продолжили- мы так привыкли уже. Я считаю, что процесс " ввести в форму условия, запустить процедуру, посмотреть результат" будет быстрее чем " позвонить для отключения условия, найти условие, отключить его,скомпилировать процедуру, запустить ее, посмотреть результат, включить условие, снова скомпилировать процедуру".
12 ноя 17, 10:18    [20946578]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Kido
Member

Откуда:
Сообщений: 46
Почему бы не сделать настроичную таблицу, куда можно положить код условия и флаг его активности?

В начале процедуры вычитывать эти данные и использовать в ваших if-ах. При надобности, что бы отключить какое либо из условий, просто убираете флаг активности и не надо ничего перекомпилировать
13 ноя 17, 06:35    [20947846]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Stebloid
Member

Откуда: Зеленоград
Сообщений: 11
Kido,
Это очень позоже на вот этот вариант:
andrey_anonymous
Табличка с параметрами, к табличке - UIшечка и кнопка "пересчитать", доступ у тех пятерых, кто рулит включением/отключением условий.


Спасибо всем откликнувшимся за варианты!
Значит, на этой версии Oracle не так уж и много решений этого вопроса.
13 ноя 17, 09:47    [20948073]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
rpovarov
Member

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

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

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

Можно добавить столбцы valid_from и valid_to, чтобы у условия было ещё и время действия (если нужно).
13 ноя 17, 18:52    [20950601]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5516
Stebloid
Вопрос состоит в следующем- может быть есть еще какие-то варианты исполнения / решения получше ?


Пересмотреть причины по которым выбрана такая архитектура решения - не предлагать?
Сходу предположу, что это "уникальность кода" и тому подобные абстракции, которые хорошо смотрятся на уровне ООП, но бредово реализуются на уровне РСУБД.
14 ноя 17, 09:19    [20951355]     Ответить | Цитировать Сообщить модератору
 Re: Переписать процедуру  [new]
Stebloid
Member

Откуда: Зеленоград
Сообщений: 11
rpovarov,
Спасибо за уточнение. =)

env,
Скорей всего, это так исторически сложилось , а также требования законодательства к отдельным этапам ввода и сопровождения информации. Какой-либо уникальности, думаю нет.Структура в общих чертах такая :
Есть бумажные документы, есть их электронная форма в браузере на Oracle Forms, заполняемая сотрудниками в регионах. Часть критически важных/основных полей проверяется при заполнении сразу на форме. Остальные требования к заполнению проверяются уже после commit`a в промежуточную таблицу запуском процедуры. И она же выдает результат в духе "поле 1 неправильно заполнено". И если нет ни каких ошибок, то данные начинают видеть в центральном офисе. Там ждут уже бумажный документ для сверки набитых данных и бумаги. И тут уже возникают моменты с отключением условий (старые документы, для которых уже не подходят требования законодательства, но данные нужны или просто какие-либо хотелки), что бы данные попали уже непосредственно в "боевую базу". Соответственно, время от времени вносятся изменения как в бумажный документ, так и в электронную форму, и в процедуры, и в таблицы и т.д. Этот процесс идет где-то с 2005г.
Я еще не представляю как можно это по другому реализовать. Поэтому, пока, решил взяться за кусок, который больше понимаю и смогу облегчить, как для себя, так, и может для будущих работников- разобраться с условиями и процедурами.
15 ноя 17, 15:05    [20956406]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить