Я написал сценарий Perl, который подключается к hdbsql - инструменту командной строки в SAP HANA. Hdbsql для SAP Hana - это то же самое, что sqlplus для Oracle.
Я использую обратную кавычку для запуска sql-запроса на hdbsql, и я фиксирую результат запроса в массиве. Ниже приведен фрагмент кода, выполняющий эту операцию:
my $sql_statement = 'SELECT some_column FROM some_table WHERE
some_condition';
my $hdb_sql = "/PROGRA~1/sap/hdbclient/hdbsql.exe";
my $connection = "-i 11 -n 100.450.10.20:31115 -u myUser -p myPwd -j -F
\"|\"";
my @queryResults = `$hdb_sql $connection $sql_statement`;
Вот где я сталкиваюсь с проблемами. Когда запрос выполняется успешно, код возврата hdbsql равен 0, а код возврата сохраняется в переменной perl «$?». также равен нулю, но в случае ошибки я наблюдал следующее:
Когда в запросе есть проблемы с синтаксисом, я получаю следующее сообщение об ошибке:
* 257: sql syntax error: incorrect syntax near "SELECTS": line 1 col 1 (at
pos 1) SQLSTATE: HY000
Мы видим, что код ошибки Hana sql - 257 из приведенного выше сообщения. Но если я распечатаю переменную perl «$?». Он дает 256 в качестве кода ошибки / возврата.
Так же,
- Для недопустимого имени столбца код ошибки hana sql - 260, но код возврата perl - 1024.
- При отсутствии агрегирования или группировки код ошибки hana sql - 276, но код возврата perl - 5120.
- Для неправильного количества аргументов в функции код ошибки hana sql - 316, но код возврата perl - 15360.
- Для недопустимого имени таблицы код ошибки hana sql - 259, но код возврата perl - 768.
и так далее...
Почему в кодах ошибок стоит "$?" дают отличаются от реальных кодов возврата hana sql? В моем скрипте я хочу распечатать фактический код ошибки hana. Как это сделать в perl. Есть ли математическая связь между двумя кодами?
Я должен заявить, что очень люблю использовать бэктики. Я не хочу переключаться на system (), perl pipe, использовать Perl DBI или любой другой модуль для запуска запроса hdbsql.
Я сталкивался с некоторыми похожими вопросами, которые задавали на этом форуме, но в моем случае они почти не помогли.
Я ценю ваши комментарии / ответы. Спасибо!!!!