【发布时间】:2015-07-03 23:58:28
【问题描述】:
我编写了一个 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 查询。
我在这个论坛上遇到过一些类似的问题,但对我而言,它们的帮助很小。
感谢您的 cmets/answers。谢谢!!!!
【问题讨论】:
标签: perl debugging error-code hana backticks