Почему контексты времени выполнения не работают на 11g в программе, скомпилированной для 10g?

У меня есть многопоточное приложение C, скомпилированное с использованием Oracle 10g (pro*c и библиотеки). Программа использует одно соединение с базой данных на каждый поток. Мы переходим на 11g, и при тестировании 11g все, что использует контекст, отличный от глобального контекста, генерирует SQL-02134: Invalid runtime context при подключении к базе данных. Использование глобального контекста работает нормально. Это известная несовместимость при переходе с 10g на 11g, или я что-то не так делаю? В конечном итоге я перекомпилирую все для 11g, но для целей реализации будет намного проще, если мы сможем запустить программу 10g до тех пор, пока все базы данных не будут преобразованы.

Что бы это ни стоило, код включает в себя то, что я считаю нормальными вещами:

EXEC SQL ENABLE THREADS;
EXEC SQL CONTEXT ALLOCATE :thread_ctx
EXEC SQL CONTEXT USE :thread_ctx

person mtruesdell    schedule 07.03.2011    source источник


Ответы (2)


SQL-02134: Invalid runtime context 

Cause: The runtime context associated with this statement has not been properly allocated.

Action: Rewrite the application to execute the EXEC SQL CONTEXT ALLOCATE statement before executing any SQL statements.

Итак, я предполагаю, что, поскольку вы сказали, что код включает этот оператор перед выполнением оператора SQL, контекст очищается перед выполнением указанного sql.

Запустите какой-нибудь отладчик, чтобы создать файл трассировки, чтобы увидеть, где именно распространяется проблема.

person Joel Slowik    schedule 20.06.2011

Объявите свой контекст перед использованием

EXEC SQL начинает объявлять раздел; sql_context thread_ctx; EXEC SQL объявляет конец раздела;

person rdodoo    schedule 16.07.2015