Вызов хранимой процедуры для данных из процедуры Oracle - PullRequest
1 голос
/ 31 августа 2009

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

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

Например:

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

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

Ответы [ 4 ]

2 голосов
/ 14 сентября 2009

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

2 голосов
/ 01 сентября 2009

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

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

0 голосов
/ 14 января 2010

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

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

0 голосов
/ 01 сентября 2009

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

...