我正在尝试从sql表运行一个具有select count的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
但是没有将表计数分配给变量tablecount。
答案 0 :(得分:1)
根据this,resultProperty
是:
命令的返回码应该在的属性的名称 存储
...因此它将从SQL * Plus获取退出代码,而不是您查询的值。如果您的脚本有多个查询或具有多个列的查询,您会期望将其设置为什么?
您可以使用SQL * Plus COLUMN
命令的NEW_VALUE
语法创建替换变量来破坏退出状态以实现此目的:
column table_count new_value my_exit_code
select count(*) as table_count from ...
exit &my_exit_code
...但你没有能力发现真正的错误。
修改:我忘了退出代码有限;来自the SQL*Plus documentation:
某些操作系统返回代码的范围也受到限制 操作系统。这限制了EXIT n和EXIT的可移植性 平台之间的变量。例如,在UNIX上只有一个 返回码的存储字节;因此,返回的范围 代码限制为零到255。
因此,除非你总是期待一个非常小的计数,否则这将不起作用,并且因为它将修改该值,你甚至不能依赖零/非零有意义。
你可能实际上并不关心伯爵;你可能只是测试某事物的存在,在这种情况下你可以做类似的事情:
select least(count(*), 1) as table_count from ...
...如果没有行,则退出代码为0;如果有行,则退出代码为。