Вызов хранимой процедуры для данных из процедуры Oracle

У меня есть ситуация, когда у меня есть процедура Oracle, которая вызывается как минимум из 3 или 4 разных мест. Мне нужно иметь возможность вызывать пользовательский код в зависимости от некоторых данных. Пользовательский код зависит от клиента, поэтому клиент A может захотеть сделать ABC, где клиент B может захотеть сделать 6-7-8, а клиент C не должен делать ничего лишнего. Когда приходят клиенты D... Z, я не хочу менять свою существующую процедуру.

Я хотел бы иметь возможность ввести специфическую для клиента процедуру в таблицу. В этой существующей процедуре проверьте эту таблицу базы данных, если существует процедура пользовательского кода, и если это так, выполните ее. Каждая из процедур кода клиента будет иметь одинаковые параметры.

Например:

  1. Мое приложение (3+ места) вызывает эту процедуру "удаления"
  2. В этой процедуре удаления найдите имя вызываемой дочерней процедуры (если она вообще существует)
  3. Если он существует, выполните эту процедуру удаления (передав параметры)

Я знаю, что могу сделать это с помощью построения строки, содержащей вызов хранимой процедуры. Но я хотел бы знать, есть ли в Oracle 10g что-то встроенное для таких вещей?

4 ответа

Решение

Окончательное решение, с которым мы пошли, состояло в том, чтобы сохранить имя процедуры в таблице базы данных. Затем мы создаем вызов SQL и используем инструкцию EXECUTE.

У каждого из ваших клиентов есть своя база данных? Если это так, лучшим вариантом будет использование условной компиляции. Это имеет преимущество в том, что не требует динамического SQL. Пусть основная программа всегда вызывает пользовательскую процедуру и использует флаги CC для изменения кода, который она содержит.

В противном случае у Oracle есть Rule Engine, но он не предназначен для нашего использования.

Согласитесь с ответом APC и просто остановитесь на нем. В этом документе, если вы ищите "Установка на основе компонентов", описывается аналогичная проблема, решаемая с помощью условной компиляции.

Ваше решение кажется разумным с учетом требований, поэтому я проголосовал за него.

Другой вариант - циклически просмотреть результаты поиска в вашей таблице и поместить вызовы процедур в большой оператор case. Это было бы больше кода, но у него было бы преимущество сделать видимой цепочку зависимостей, чтобы вам было легче ловить отсутствующие разрешения и недопустимые процедуры.

Другие вопросы по тегам