SAP HANA のコマンドライン ツールである hdbsql に接続する perl スクリプトを作成しました。SAP Hana に対する Hdbsql は、Oracle に対する sqlplus と同じです。
バックティックを使用して hdbsql で SQL クエリを実行しています。クエリの結果を配列にキャプチャしています。以下は、この操作を実行するコードの一部です。
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リターンコードとは異なりますか? 私のスクリプトでは、実際のハナ エラー コードを出力したいと考えています。Perl で行うにはどうすればよいですか。2 つのコード間に数学的な関係はありますか?
バックティックの使用に熱心であることを述べなければなりません。system() 、 perl pipe に切り替えたり、perl DBI またはその他のモジュールを使用して hdbsql クエリを起動したりしたくありません。
このフォーラムで同様の質問がいくつかありましたが、私の場合はほとんど役に立ちませんでした。
コメント/回答に感謝します。ありがとうございました!!!!