我已经编写了一个 perl 脚本,它连接到 hdbsql 一个 SAP HANA 上的命令行工具。HDbsql 之于 SAP Hana 就像 sqlplus 之于 Oracle。
我正在使用反引号在 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。
等等...
为什么错误代码是“$?” give 与实际的hana sql 返回码不同?在我的脚本中,我想打印出实际的 hana 错误代码。我如何在 perl 中执行此操作。两个代码之间是否存在数学关系
我必须说明这一点,我热衷于使用 backtics。我不想切换到 system() , perl pipe ,使用 perl DBI 或任何其他模块来触发 hdbsql 查询。
我在这个论坛上遇到过一些类似的问题,但就我而言,它们几乎没有帮助。
感谢您的评论/回答。谢谢!!!!