Работа с СУБД Oracle через интерфейс OCCI - Работа с переменными IN/OUT, OUT
ОГЛАВЛЕНИЕ
Страница 3 из 4
Работа с переменными 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 после регистрации, иначе значение будет потеряно