1

我正在尝试运行具有从 sql 表中选择计数的 sql 文件,并将其存储在使用 ant 中的 sqlplus 的变量中。

ora:sqlplus  dir="${basedir}" start="${sql_count_table_name}.sql" silent="true"
  logon="${sql_username}/${sql_password}@${sql_database}" 
  failonerror="false" resultproperty="tablecount">
</ora:sqlplus

但是表计数没有分配给变量表计数。

4

1 回答 1

1

据此resultProperty

应存储命令返回码的属性名称

...因此它将从 SQL*Plus 中获取退出代码,而不是您查询的值。如果您的脚本有多个查询,或者有多个列的查询,您希望它设置什么?

您也许可以通过使用 SQL*PlusCOLUMN命令的NEW_VALUE语法创建替换变量来破坏退出状态来实现这一点:

column table_count new_value my_exit_code
select count(*) as table_count from ...
exit &my_exit_code

...但是您将失去任何检测真正错误的能力。


编辑:我忘记了退出代码是有限的;来自SQL*Plus 文档

操作系统返回码的范围在某些操作系统上也受到限制。这限制了 EXIT n 和 EXIT 变量在平台之间的可移植性。例如,在 UNIX 上,返回码只有一个字节的存储空间;因此,返回码的范围被限制在 0 到 255 之间。

因此,除非您总是期望一个非常小的计数,否则这是行不通的,因为它会修改值,您甚至不能依赖零/非零是有意义的。

您可能实际上并不关心计数;您可能只是在测试某物的存在,在这种情况下,您可以执行以下操作:

select least(count(*), 1) as table_count from ...

...如果没有行,它会给你一个退出代码 0,如果有的话,它会给你一个退出代码。

于 2012-08-02T14:50:36.520 回答