我正在尝试运行一个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但是表计数没有被赋值给变量tablecount。
发布于 2012-08-02 22:50:37
根据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
在某些操作系统上,操作系统返回代码的范围也受到限制。这限制了出口n和出口变量在平台之间的可移植性。例如,在UNIX上,返回代码只有一个字节的存储空间;因此,返回代码的范围被限制在0到255之间。
因此,除非你总是期望一个非常小的计数,否则这是行不通的,因为它会修改值,你甚至不能指望零/非零是有意义的。
您可能实际上并不关心计数;您可能只是在测试某些东西的存在,在这种情况下,您可以这样做:
select least(count(*), 1) as table_count from .....。如果没有行,则返回退出代码0;如果有行,则返回1。
https://stackoverflow.com/questions/11777325
复制相似问题