Почему контексты времени выполнения не работают на 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.

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

Другие вопросы по тегам