Когда ЗАПРОС на ПОДГОТОВКУ завершается с ошибкой в PRO C?

#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. Но есть ли у вас какая-либо официальная страница или документация, подтверждающие вашу точку зрения? заранее спасибо.