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
не соответствует вашему описанию того, что он делает.