Невозможно выполнить хранимые процедуры через OLEDB - PullRequest
0 голосов
/ 12 января 2012

Я локально запускаю экземпляр Oracle 11gR2 для тестирования.Я подключаюсь к нему с помощью OLEDB, используя VC ++.Я использую CCommand и могу выбирать, обновлять, вставлять и удалять из своих таблиц.
Сейчас я не могу выполнить хранимые процедуры.

Это простая хранимая процедура, которая вставляетряд к моему столу.Я могу запустить его из SQL Plus без помех.Однако, когда я прихожу, чтобы выполнить его из своего кода, это не работает.Я получаю ошибку 80040e14.

Это довольно просто, но, в любом случае, вот линия.

hr = cmd.Open(session, "exec get_item_count");

Есть идеи?

1 Ответ

2 голосов
/ 12 января 2012

EXEC - это синтаксис SQL * Plus.Он недопустим вне SQL * Plus (и различных графических интерфейсов PL / SQL, которые реализуют многие функции, предоставляемые SQL * Plus).

Возможно, вы хотите что-то подобное (используя синтаксис ODBC)

hr = cmd.Open(session, "{call get_item_count}");

или этот (с использованием синтаксиса Oracle)

hr = cmd.Open(session, "begin get_item_count; end;");

Если вы используете синтаксис Oracle, один и тот же синтаксис будет работать как в SQL * Plus, так и в вашем приложении.SQL * Plus не понимает синтаксис ODBC.Однако другие поставщики OLE DB будут поддерживать синтаксис ODBC, поэтому синтаксис ODBC переносим между различными механизмами баз данных.

Кроме того, если у вас есть объект PL / SQL, который получает количество элементов, это должна быть хранимая функция, а нехранимая процедура.Вы говорите, что процедура вставляет строку в вашу таблицу, что процедура должна делать, а функция - нет, но имя объекта get_item_count не соответствует вашему описанию того, что он делает.

...