Выполнение хранимой процедуры через ODBC - PullRequest
1 голос
/ 17 августа 2010

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

Для бэкэнда ODBC я вызываю SQLExecDirect () для строки SQL, которая прекрасно работает на обычных запросах, но не работает для хранимыхпроцедуры с параметрами.

Есть ли простой способ расширить этот механизм для поддержки хранимых процедур?Определенным образом, как должен быть написан SQL?

Единственное, о чем я могу подумать сейчас, - это начать анализ строки SQL и вызывать SQLBindParameter () n раз, если он содержит «вызов».Но анализ SQL сложен.

Есть идеи?

Пример рабочего SQL: SELECT columnA из foo, где columnB = '% placeholder'

Неработающий SQL: CALL StoredFoo ('% заполнитель')

1 Ответ

2 голосов
/ 17 августа 2010

Как вызывать хранимые процедуры (ODBC) :

Чтобы запустить процедуру как RPC

  1. Создание оператора SQL, который использует escape-последовательность ODBC CALL. В операторе используются маркеры параметров для каждого входа, ввода / вывода и выходной параметр, а для Возвращаемое значение процедуры (если есть):

    {? = CALL procname (?,?)}

  2. Вызовите SQLBindParameter для каждого ввода, ввода / вывода и вывода параметр, и для процедуры возвращаемое значение (если есть).

  3. Выполнить оператор с SQLExecDirect.

В противном случае вам нужно выполнить процедуру как обычный пакет (не вызов RPC), т.е. вам нужно запустить партию:

EXEC procname @param1, @param2, @param3...;
...