Почему контексты времени выполнения не работают на 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
2 ответа
Объявите свой контекст перед использованием
EXEC SQL начать объявить раздел; sql_context thread_ctx; EXEC SQL конец объявления раздела;
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.
Запустите какой-нибудь отладчик, чтобы создать файл трассировки, чтобы увидеть, где именно распространяется проблема.