Работа с СУБД Oracle через интерфейс OCCI - Работа с переменными IN/OUT, OUT

ОГЛАВЛЕНИЕ


Работа с переменными IN/OUT, OUT

Мы рассмотрели только переменные передаваемые в режиме IN, но OCCI позволяет работать с OUT & IN/OUT. Такие переменные актуальны в случае использования так называемых callable statemens - имеется виду вызов процедур и функций на PL/SQL.

Рассмотрим работу с такими запросами. Предположим, в базе имеется функция на PL/SQL, вот ее прототип:

CREATE OR REPLACE FUNCTION insclient(ContractNumber IN VARCHAR,
                                         ClientPasswd IN OUT VARCHAR,
                                         Action IN VARCHAR
                                         ) RETURN INTEGER;

Пример работы с ней:

  …
  string passwd;
  int res;
  …
Statement *stmt = conn->createStatement("BEGIN :v1 := insclient(:v2,:v3,:v4); END;");
// устанавливаем параметры
stmt->setString(2,login);
// регистрируем выходные параметры
stmt->registerOutParam(1,OCCIINT,sizeof(res));
stmt->registerOutParam(3,OCCISTRING,pass_length+2);
// устанавливаем значение параметров для IN/OUT после регистрации !!!
stmt->setString(3,pass_syms.c_str());
stmt->setString(4,command);
stmt->execute();
// получаем результат выполнения
res = stmt->getInt(1);
// получаем указатель на результат
passwd = stmt->getString(3);
// освобождение ресурсов
conn->terminateStatement(stmt);
env->terminateConnection(conn);

Примечания:

  • Регистрировать параметры нужно указывая их максимальную длину
  • Устанавливать значения параметров IN/OUT после регистрации, иначе значение будет потеряно