powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Переписать процедуру
26 сообщений из 26, показаны все 2 страниц
Переписать процедуру
    #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
Переписать процедуру
    #39551049
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stebloidподсказали еще вариант через сохранение текста процедур в таблицы, и уже оттуда пытаться собирать процедуру и запускать только с определенными строками(Rinka777).Бред.
...
Рейтинг: 0 / 0
Переписать процедуру
    #39551067
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Условную компиляцию не предлагать?
...
Рейтинг: 0 / 0
Переписать процедуру
    #39551080
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stebloid,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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