#database #oracle #oracle-pro-c
#База данных #Oracle #oracle-pro-c
Вопрос:
Когда ЗАПРОС на ПОДГОТОВКУ завершается с ошибкой в PRO C?
EXEC SQL AT :db_id PREPARE QUERY FROM :sql_query;
bool sql_status = (sqlca.sqlcode == OERR_ORACLE_SUCCESS);
if (sql_status)
{
}
else
{
}
До недавнего времени у меня не было этой проблемы, код работал нормально, ЗАПРОС PREPARE работает нормально (переходит в цикл if_, но внезапно произошел сбой, и после этого он не работает (переходит в цикл else).).
Ничего не изменилось, и это тот же двоичный файл.
Кто-нибудь сталкивался с подобной проблемой в прошлом?
Комментарии:
1. Я думаю, вы можете захотеть посмотреть на значение sql_query, поскольку оно динамически готовится на основе этого.
Ответ №1:
Я написал МНОГО pro * c в прошлом, и со временем понял, что вы не хотите проверять код возврата инструкции PREPARE, поскольку он никогда не возвращает никакого значения. Вот что я имею в виду:
Значение PREPARE sqlca.sqlcode — это код возврата инструкции, которая выполнялась непосредственно ПЕРЕД инструкцией PREPARE. Другими словами, если вы проверяете вывод инструкции PREPARE и инструкции, которая выполнялась непосредственно перед сбоем инструкции PREPARE, то код возврата prepare завершается с ошибкой. Если предыдущее утверждение выполнено успешно, то ПОДГОТОВКА, по-видимому, выполнена успешно.
Другими словами, значение prepare sqlca.sqlcode по сути ничего не значит (само по себе оно никогда не завершается сбоем). Поэтому, если ПОДГОТОВКА сейчас завершается с ошибкой, проверьте инструкцию, которая выполнялась непосредственно перед инструкцией PREPARE, и убедитесь, что вы проверяете значение sqlca.sqlcode этого. Держу пари, что предыдущий оператор не выполняется, и возвращаемая ошибка относится к этому оператору. Имеет смысл?
-Джим
Комментарии:
1. спасибо за ваш ответ, я рассмотрю проблему, помня об этом.
2. Но есть ли у вас какая-либо официальная страница или документация, подтверждающие вашу точку зрения? заранее спасибо.